我有一个视图控制器,我试图推入导航堆栈。我用局部变量创建控制器,设置它,然后将其分配给一个属性。然后,如果我释放变量,我会得到EXE_BAD_ACCESS。如果我保留(或自动释放)它会泄漏。如果我释放,我得到不好的访问,如果我保留,我泄漏
CustomTVC* controller = [[CustomTVC alloc]initWithStyle:UITableViewStyleGrouped];
controller.managedObjectContext = self.managedObjectContext;
self.tableViewControllerIvar = controller;
[self.navigationController pushViewController:self.tableViewControllerIvar animated:YES];
//[controller autorelease]; or [controller release]; or nothing
这里是如果我释放
- 上面的代码是从导航栏按下添加按钮发射发生什么。
- 视图被推送,一切都很好。在新视图中,我可以一遍又一遍地推送更多视图,没有问题...除非
- 我回到导航堆栈的根视图。 (这是上述代码的来源)。
- 现在,如果我再次钻取到第二个视图,然后尝试推入另一个它崩溃。
编辑:我有一种感觉,当我将第三个控制器推入堆栈时出现了问题。通过推送,它将一个新对象插入托管对象上下文中,这会导致fetchedresultscontroller更新tableview。在那里可能有一个破碎的指针。我会玩它并发布结果。 -
编辑:5/16
在日志中收到此错误消息
* - [CustomTVC controllerWillChangeContent:]:消息发送到释放实例0x187270
这只发生在我将CustomTVC弹出堆栈(回到导航根视图控制器)后,我可以推送并保存所有I只要我不弹出CustomTVC即可。
你应该能够发布一个你推到NVC栈的VC。但是你的代码显示你发布了变量'controller',但是在推送变量'VCTVC'之后?如果你推动'控制器'呢? – samvermette 2011-05-15 02:08:25
请为'tableViewControllerIvar'显示'@ property'声明。 – 2011-05-15 03:32:11
@property(nonatomic,retain)CustomTVC * tableViewControllerIvar; – 2011-05-15 04:21:50