在 Xcode 5.1.1 而不是 Xcode 6 中发现问题

Posted

技术标签:

【中文标题】在 Xcode 5.1.1 而不是 Xcode 6 中发现问题【英文标题】:Issue found in Xcode 5.1.1 and not in Xcode 6 【发布时间】:2014-11-30 16:56:29 【问题描述】:

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

有没有人遇到过类似的问题。任何帮助?

【问题讨论】:

请注意,不要将您的属性名称大写。它不符合 Objective-C 风格。 请包含您对 MyViewController 的属性声明。 @property (strong, nonatomic) MyViewController *myViewController; 是在视图控制器弹出之后还是在推送时发生? @abhishekkharwar 在推送时。 【参考方案1】:

该警告是由于在您的构建方案中启用了NSZombieEnabled 而出现的(请参阅链接问题)。

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


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

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

为了解决问题,您需要监控MyViewController 的对象生命周期——即它何时创建、何时访问以及何时/可能释放。在某些时候,当您仍想使用视图控制器时,它会被释放。 This *** answer 提供了关于如何使用 Instruments 来追踪和修复此类错误的优秀指南。

【讨论】:

以上是关于在 Xcode 5.1.1 而不是 Xcode 6 中发现问题的主要内容,如果未能解决你的问题,请参考以下文章

模拟器名称在 Xcode 6.2 中显示为 id 而不是 os 名称

使用 Xcode6-Beta 运行 Xcode 5.1.1 项目

Swift:Xcode 6.1.1 更改由代码块执行而不是按钮触发的视图

升级到 XCode 6.3.2 后核心数据模型找不到自动生成的实体类(使用 Objective-C 而不是 Swift)

Xcode 7 警告!是为比被链接 (5.1) 更新的 iOS 版本 (5.1.1) 构建的

Xcode 6 自动布局灵活宽度