我有一个使用核心数据的可可应用程序。一切似乎都很好。
然而,在一个非常特殊的情况下,应用程序对我们的客户来说表现得非常奇怪。
特别是日志显示它多次出现在输出中(我在测试中从未见过):
Core Data: annotation: -executeRequest: encountered exception = Updating max pk failed: with userInfo = {
NSSQLiteErrorDomain = 14;
}
有没有人见过这条消息,你知道这意味着什么吗?我已经尝试使用谷歌搜索,但没有找到关于有关类似问题的Growl应用程序的几个留言板以外的信息,但还没有解决方案。
很抱歉,由于我甚至不确定自己,因此我无法更具体地说明原因。我知道如何在客户端的机器上重现这个,但这个消息似乎很随机。
我希望有人可以给我一些关于这个错误究竟意味着什么的更多信息,以便我可以将其缩小一些。现在我很无能为力。
注意:这出现在运行10.7.2的macbook pro上(如果重要的话)。
感谢您提供的任何帮助,即使是模糊的东西也会帮助我。
更新
托管上下文“save”方法也失败,并出现以下错误:
无法完成操作。 (可可错误134030。)
答案 0 :(得分:2)
这不是真正的核心数据问题,但更多的是你处理文件描述符耗尽的问题。
每个进程都有有限数量的文件描述符。如果你用完了,Core Data(以及许多其他东西)将停止工作,因为他们无法再打开文件 - 任何他们都会失败。
首先,请确保您没有泄露文件描述符,即确保在不再需要文件时关闭文件。
我不确定您要跟踪的是哪种更改。看看Tracking File-System Changes。
如果您使用的是10.7,请查看调度源和DISPATCH_SOURCE_TYPE_VNODE
,以获取一个非常强大的工具来跟踪文件系统更改(对应kqueue
,但更容易使用)。
答案 1 :(得分:0)
当Core Data尝试将DB保存到没有完全读/写访问权限的位置时,Core Data也会在Sandboxed应用程序中出现此错误(例如,如果用户打开文件,Core Data将能够读取/写入此文件,但不能写入同一文件夹。
Core Data无法将临时_journal
文件写入此文件夹并报告此错误。