我有一个使用只读核心数据数据库的应用程序(这意味着我从不写入数据库)。我有一个 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/