ios - 当应用程序从后台恢复时,核心数据实体消失

标签 ios core-data

我有一个使用只读核心数据数据库的应用程序(这意味着我从不写入数据库)。我有一个 View Controller ,它获取一些核心数据实体并将它们显示在表中。例如,我有一个名为 Photo 的核心数据实体,在我的 View Controller 中,我有 @property (nonatomic, Strong) NSArray *photos;,它是照片对象列表。

现在,当应用程序重新启动时,一切正常。但是,当我转到该 View 并退出应用程序(因此它仍然在后台)并重新输入它时,我设置的 @property 变为 nil。我仍然在屏幕上看到当前的所有 UITableViewCell。但是,当我尝试滚动时,应用程序崩溃了。

我有多个使用核心数据内容的 View ,但其中一些工作得很好。我想知道为什么对于某些 View Controller ,当应用程序返回前台时,设置为 @property 的 Core Data 对象会消失。

谢谢!

最佳答案

第一个建议:您应该使用 NSFetchedResultsController 而不是数组。除了许多其他优点之外,这更加高效,并且可以为您考虑所有内存问题。事实上,它是专门为管理基于 Core Data 的 TableView 的数据源而设计的。

如果您仍然想使用阵列,我推测您未能正确初始化它。

在您的 viewDidLoad 方法中,不要只分配从核心数据获取的结果,而是通过正确的初始化来完成:

self.photos = [[NSArray alloc] initWithArray:coreDataResults];

现在数组应该持续存在。

关于ios - 当应用程序从后台恢复时,核心数据实体消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11729488/

相关文章:

ios - coreData executeFetchRequest 方法的竞争条件导致 nil 数据的问题

iOS:核心数据:简单示例中的 NSRangeException

iphone - NSIncrementalStore - 使用本地和远程数据

ios - iOS 中的 SQLite 多个 INSERT

ios - 关于 UnsafeMutablePointer 的 destroy() 的术语

ios - 如何将 MKMapItem 转换为二进制数据存储在 Core Data 中?

ios - Swift 中的核心数据 : Only saving last object in a for loop

ios - SKStoreReviewController requestReview 方法需要时间来显示并且应用程序卡住,直到出现 ReviewController

ios - Alamofire:支持上传包含文本和文件部分的多部分表单吗?

ios - 在将我的第一个 ios 应用程序发送到 Apple App store 之前,我应该做什么/知道什么?