转换为使用自动引用计数后,不再调用委托方法

时间:2011-10-19 14:06:21

标签: objective-c ios uitableview ios5 automatic-ref-counting

我已经将我正在编写的应用程序转换为ios 5,然后使用内置工具将其转换为使用自动引用计数。 ios 5没有问题,但是在ARC转换之后,我的大多数代表呼叫似乎都没有工作。例如,我有一个UITableViewController的子类,其.h文件看起来像:

@interface UITableVCSubclass : UITableViewController <UITableViewDelegate, ... >
...
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;
...
@end

表视图委托方法tableView:didSelectRowAtIndexPath:当我选择表的一行时,不再调用它。如果选中self.tableview.delegate == self,那就是它。有什么想法为什么停止工作?

1 个答案:

答案 0 :(得分:1)

我有同样的问题,找不到好的参考,所以希望这会对别人有所帮助。运行ARC重构doohickey后,我的工作项目无效。我的UITableView的视图控制器正在动态创建并推送而不保存引用,这不是转换过程所寻找的。

当它退出范围时,ARC正在释放vc,因此视图可见,但其代表已经消失。为了修复它,我向super添加了一个强大的属性来保存对新视图控制器的引用,然后我又开始接收事件。

改变了这一点:

MyViewController *myViewController = 
    [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil];

使用新属性:

self.myViewController = 
    [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil];