CoreData:升级应用程序时返回 nil 的字段

Posted

技术标签:

【中文标题】CoreData:升级应用程序时返回 nil 的字段【英文标题】:CoreData: field returning nil when upgrading app 【发布时间】:2014-04-10 16:31:06 【问题描述】:

我正在使用 CoreData 并遇到以下情况:

我通过 App Store 安装我的应用程序。该版本是使用 ios 6 SDK 构建的。 我运行应用程序,它使用 CoreData 存储一些东西。 然后我通过 TestFlight 升级应用程序(使用 iOS 7 SDK 完成的新版本)并且行为不是预期的行为,似乎 NSManagedObject 字段返回 nil(我知道它不应该有任何区别,但是我正在使用valueForKey: 访问它。

想知道发生了什么,我卸载了该应用程序,从 App Store 重新安装它并运行从 Xcode 提交给 TestFlight 的版本以对其进行调试。我看到 valueForKey: 在我第一次运行应用程序时返回 nil,但第二次我按照相同的步骤(从 App Store 卸载并安装,然后使用 Xcode 运行)问题就消失了。从这一刻起,如果我按照原来的步骤(AppStore -> TestFlight),它总是可以正常工作,那么 valueForKey: 调用将不再返回 nil 。很奇怪。

因此,假设我的设备上已解决此问题,但从未使用 Xcode 运行该应用的队友遇到了上述问题。

我已尝试设置像 this answer 中评论的持久存储选项(将其提交给 TestFlight),但没有帮助 - 我的队友仍然遇到问题。

以前有没有人遇到过类似的问题?知道这个问题的原因吗?

【问题讨论】:

【参考方案1】:

如果不在 Xcode 中运行应用程序,针对调试版本,您将无法不费力气地调试此问题。

开发应用程序的人应该在调试模式下运行它,并且可以观察控制台、设置断点等来解决问题。

【讨论】:

感谢您的回答马库斯。我遇到的问题是该问题仅在从 TestFlight 安装时发生。您认为 sqlite 持久存储中的任何 iOS 7 更改可能是我的问题的原因吗? 如果它仅在您运行测试飞行构建时发生,那么我建议从 Xcode 运行该构建配置,安装应用商店,然后运行 ​​Xcode 构建并观察控制台。它将为您提供解决此问题所需的信息。 问题是这只发生在我队友的设备中。在我的(我已经通过 Xcode 运行该应用程序,然后从设备中删除该应用程序)它可以正常工作......这是一个非常奇怪的问题。似乎从 Xcode 运行应用程序以某种方式解决了问题,即使在我删除应用程序后,从 App Store 和 TestFlight 安装。 幻象设备错误让我发疯。如果您可以将他们的设备插入 Xcode,您应该能够从设备中获取整个应用程序包,然后尝试在另一台设备上重放它。运气好的话,它会给你一个提示。如果您至少可以将他们的设备插入 Xcode,您可以尝试查看他们的控制台以获取一些提示。

以上是关于CoreData:升级应用程序时返回 nil 的字段的主要内容,如果未能解决你的问题,请参考以下文章

CoreData事务记录查询(Query)中NSPersistentHistoryTransaction.fetchRequest总返回nil的解决

CoreData事务记录查询(Query)中NSPersistentHistoryTransaction.fetchRequest总返回nil的解决

NSEntityDescription 在展开可选值时返回 nil

核心数据 - NSManagedObjectContext 在 Master-Detail 应用程序中返回 nil

CoreData TextField - 意外发现 nil

+[NSManagedObjectModel mergeModelFromBundles::forStoreMetadata:] 总是返回 nil