持久存储条目仍然存在,但重建时数据为空
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 没关系,此外,我对此并不完全确定。也许有更准确的答案。 ;)以上是关于持久存储条目仍然存在,但重建时数据为空的主要内容,如果未能解决你的问题,请参考以下文章
ios FileManager在重建应用程序时丢失存储的数据