持久存储条目仍然存在,但重建时数据为空

Posted

技术标签:

【中文标题】持久存储条目仍然存在,但重建时数据为空【英文标题】:persistent store entries remain but data is empty when rebuilding 【发布时间】:2012-05-14 12:55:36 【问题描述】:

我正在开发一个使用持久存储来保存和检索数据的应用程序。我一切正常,但有一些奇怪的行为让我非常怀疑我所做的是否正确。

当我构建我的应用程序时,一些值被加载到持久存储中并且可以访问。当我在界面构建器中关闭应用程序然后重新加载它时,这仍然是正确的。

加载的数据在记录时看起来像:

实体:约会;数据:天=星期一;小时 = 8;项目 = 项目1;任务=任务1;

现在,在重建应用程序时,商店中的条目仍然存在,但是,这些条目中应该存在的数据似乎已被破坏。

加载的数据现在看起来像:

实体:约会;数据:故障

我会假设商店要么完全重建,因此不会留下任何条目,要么会保持重建前的原样。

约会是在我的 xcdatamodel 中定义的NSManagedObject 类,具有四个字符串属性(日、小时、项目和任务)。

【问题讨论】:

你能分享约会实体的详细信息吗? 【参考方案1】:

没有代码就很难看到发生了什么。您收到错误了吗?

data:fault 并不意味着您做错了什么。每次您发出请求时,Core Data 不会检索整个对象,而是检索它的骨架。对象内的数据不会立即填充,而只会在您触发错误时填充(例如,访问该实体的属性)。

因此,如果您以这种方式记录该对象:

NSLog(@"%@", managedObject);

这可能是这样做的动机。

有关故障的更多信息,我建议您阅读Faulting。

希望对你有帮助。

【讨论】:

【参考方案2】:

    运行你的模拟器,然后在顶部菜单栏中选择ios Simulator -> Reset Content & Settings...。它将重置您应用的所有数据,包括 CoreData。

    或者你可以去~/Library/Application\ Support/iPhone\ Simulator/5.0/Applications,删除App bundle。

    或者直接删除~/Library/Application\ Support/iPhone\ Simulator/5.0/Applications/E88E378D-14A9-4900-A613-BF9082D4B2C1(YourAppBundle)/Documents/中的xxx.sqlite文件。

然后重建您的项目并运行它,现在清理数据。 ;)

【讨论】:

这是否意味着以上是正常行为呢?从模拟器中删除应用程序已经帮助我清除数据,但我假设我做错了什么。 @eelco 是的,我想是的。由于文件存在,所以下次重建项目时,if (! [fileManager fileExistsAtPath:storePath]) (在AppDelegate.m的persistentStoreCoordinator方法中)部分将被传递。 好的,那我就放心了。如果您可以编辑答案以表明这确实是默认行为,我会将其标记为正确答案。 @eelco 没关系,此外,我对此并不完全确定。也许有更准确的答案。 ;)

以上是关于持久存储条目仍然存在,但重建时数据为空的主要内容,如果未能解决你的问题,请参考以下文章

从备份数据重建JPEG图像

ios FileManager在重建应用程序时丢失存储的数据

Kubernetes存储

Idea中重建maven模块,dependencies引入为空的解决办法

Elasticsearch系列---实战零停机重建索引

Elasticsearch系列---实战零停机重建索引