核心数据:更新max pk失败

时间:2012-03-06 18:13:40

标签: cocoa exception core-data

我有一个使用核心数据的可可应用程序。一切似乎都很好。

然而,在一个非常特殊的情况下,应用程序对我们的客户来说表现得非常奇怪。

特别是日志显示它多次出现在输出中(我在测试中从未见过):

Core Data: annotation: -executeRequest: encountered exception = Updating max pk failed:  with userInfo = {
NSSQLiteErrorDomain = 14;
}

有没有人见过这条消息,你知道这意味着什么吗?我已经尝试使用谷歌搜索,但没有找到关于有关类似问题的Growl应用程序的几个留言板以外的信息,但还没有解决方案。

很抱歉,由于我甚至不确定自己,因此我无法更具体地说明原因。我知道如何在客户端的机器上重现这个,但这个消息似乎很随机。

我希望有人可以给我一些关于这个错误究竟意味着什么的更多信息,以便我可以将其缩小一些。现在我很无能为力。

注意:这出现在运行10.7.2的macbook pro上(如果重要的话)。

感谢您提供的任何帮助,即使是模糊的东西也会帮助我。

更新

托管上下文“save”方法也失败,并出现以下错误:

  
    

无法完成操作。 (可可错误134030。)

  

2 个答案:

答案 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文件写入此文件夹并报告此错误。