问题在Xcode 5.1.1中找到而在Xcode 6中找不到

时间:2014-10-06 12:19:54

标签: ios iphone ipad

如果我从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构建相同的应用程序,那么我没有看到任何问题,它工作正常。

是否有人遇到类似问题。任何帮助?

1 个答案:

答案 0 :(得分:1)

在您的构建方案中启用NSZombieEnabled后会出现此警告(请参阅链接问题)。

在某些时候,[MyViewController numberOfSectionsInTableView:]MyViewController不再存在时被调用 - 没有更多对该对象的引用,因此它被解除分配。


至于为什么会在Xcode 5而不是Xcode 6上发生这种情况,这可能是因为您的应用程序在模拟器中的配置或状态与设备相比 - 例如,一个环境包含另一个环境不包含的数据或设置?

从您的代码中,我可以看到MyViewController可能是UITableViewDataSource。一个设备/模拟器是否包含另一个没有的表视图数据?如果是这样,那就是错误出现在一个环境中但不出现在另一个环境中的原因。 出现在两者中,但只有一个具有必要的设置/配置才能触发被调用的方法。

为了解决问题,您需要监视MyViewController的对象生命周期 - 也就是说,何时创建它,何时访问它以及何时/它可能被释放。在某些时候,当您仍想使用视图控制器时,它将被释放。 This StackOverflow answer提供了有关如何使用Instruments跟踪和修复这些错误的出色指南。