如果我从Xcode 5和我构建我的应用程序,我有一个问题 在iOS 8的设备上运行相同的操作我看到崩溃并显示错误消息
[myViewController numberOfSectionsInTableView:] message sent to deallocated instance 0x1846c960
我已将课程分配如下
@property (strong, nonatomic) MyViewController *myViewController;
myViewController =[[MyViewController alloc]initWithNibName:@"MyViewController" bundle:[NSBundle mainBundle]];
myViewController.userDetailsDict=userDetailsDict;
[self.navController pushViewController:self.myViewController animated:FALSE];
如果我从Xcode 6构建相同的应用程序,那么我没有看到任何问题,它工作正常。
是否有人遇到类似问题。任何帮助?
答案 0 :(得分:1)
在您的构建方案中启用NSZombieEnabled后会出现此警告(请参阅链接问题)。
在某些时候,[MyViewController numberOfSectionsInTableView:]
在MyViewController
不再存在时被调用 - 没有更多对该对象的引用,因此它被解除分配。
至于为什么会在Xcode 5而不是Xcode 6上发生这种情况,这可能是因为您的应用程序在模拟器中的配置或状态与设备相比 - 例如,一个环境包含另一个环境不包含的数据或设置?
从您的代码中,我可以看到MyViewController
可能是UITableViewDataSource
。一个设备/模拟器是否包含另一个没有的表视图数据?如果是这样,那就是错误出现在一个环境中但不出现在另一个环境中的原因。 将出现在两者中,但只有一个具有必要的设置/配置才能触发被调用的方法。
为了解决问题,您需要监视MyViewController
的对象生命周期 - 也就是说,何时创建它,何时访问它以及何时/它可能被释放。在某些时候,当您仍想使用视图控制器时,它将被释放。 This StackOverflow answer提供了有关如何使用Instruments跟踪和修复这些错误的出色指南。