核心数据软管本身
Posted
技术标签:
【中文标题】核心数据软管本身【英文标题】:Core Data hoses itself 【发布时间】:2014-12-23 06:24:38 【问题描述】:我定期从 Xcode 启动我的应用程序以查找由于模型文件为空而导致的核心数据错误。版本化的模型文件可以在主包中找到,但模型文件仍然初始化为零。请参阅我的答案以了解部分解决方法,但迄今为止没有解决方案。
我已验证文件存在并且可以使用访问功能进行访问。我试过使用 initWithContentsOfURL 和 mergeModelFromBundles 得到相同的结果。
这是随机发生的,我怀疑某些东西正在改变幕后的模型文件,但我不知道是什么。
【问题讨论】:
这可能是硬件问题,例如空间有限、驱动器、电缆或连接出现故障。 有趣的想法。我可以验证空间不是一个因素。这是我每天都在使用的 MacBook Pro,并且无法指出任何让我认为这是一个问题的规律性。不过,我会注意这一点。 今天又发生了这种情况,我发现我的应用程序无法访问其捆绑包中的任何文件。对 fileExistsAtPath 的所有检查都返回 NO 并尝试枚举目录内容失败,错误 -260 声称目录不存在。清理项目没有影响,删除 DerivedData 中的所有文件也没有影响。 【参考方案1】:重新启动我的计算机似乎已经解决了与安全相关的崩溃,但这也需要删除现有的 Core Data 存储文件,因为它抱怨现有的与模型文件不匹配。
[更新]
重启并不能解决问题。但是重置当前版本的 Core Data 模型文件就可以了。我将其更改为旧版本,然后返回。这个问题帮助我认为这是可以尝试的。 Using mergedModelFromBundles: and versioning (CoreData) 仍然不确定根本问题是什么。
[另一个更新]
我在我的 Core Data momd 文件包中的 .xccurrentversion 文件上放置了一个文件监视器,以观察文件何时被触摸。我注意到 XCode(或某些构建工具)会在 XCode 进入前台时定期更新 .xccurrentversion 文件(无论是打开项目还是在后台运行一段时间)。当它今天这样做时,它将文件设置 _XCCurrentVersionName 更新为主 momd 文件包而不是版本文件。我用旧版本替换了 .xccurrentversion 文件并启动了它。这可以解释为什么重置当前模型版本可以解决此问题。我不知道 XCode 更新这个文件的条件是什么。
【讨论】:
以上是关于核心数据软管本身的主要内容,如果未能解决你的问题,请参考以下文章
可以将“self”与 NSSortDescriptor 一起使用来按对象本身而不是对象的属性进行排序? (核心数据/NSFetchedResultsController)