【问题标题】:Core Data: Updating max pk failed核心数据:更新最大 pk 失败
【发布时间】:2023-03-11 08:35:01
【问题描述】:

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

但是,在一个非常具体的场景中,该应用对我们的客户来说表现得非常奇怪。

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

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

有没有人看过这条消息,你知道它的含义吗?我试过用谷歌搜索它,但除了一些关于 Growl 应用程序存在类似问题的留言板之外没有发现任何信息,目前还没有解决方案。

抱歉,我无法更具体地说明导致此问题的原因,因为我自己也不确定。我知道如何在客户端机器上重现此消息,但此消息似乎非常随机。

我希望有人能给我更多关于这个错误的确切含义的信息,以便我可以进一步缩小范围。现在我很无知。

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

感谢您提供的任何帮助,即使是含糊不清的内容也会对我有所帮助。

更新:

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

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

【问题讨论】:

  • 您的应用在非常具体的场景中做了什么?是否可重现?
  • 它将一堆文件/目录 URL 添加到一个数组中,并将侦听器注册到这些文件夹。我发现当我添加太多文件和文件夹(例如 7000+)时,我会收到这些错误。我现在已经优化了应用程序以添加更少的目录来收听,并且我不再收到错误消息。我仍然不知道错误是什么意思。会不会是在核心数据中添加了太多东西?我知道“pk”是生成的原始 SQL 数据库中使用的前缀,但我不知道这是否相关。仍然是个谜。
  • Core Data 无法打开数据库文件,因为您已经用完了进程可用的所有文件描述符。
  • 有趣,有道理。如果你能提供这个问题的答案,或者提供一些解决方法,我会很乐意接受。
  • 我有同样的问题,但是当我检查我的文件描述符时,我只有 40 个!最大。这不允许我保存数据库。我在组织者日志中看到最大打开文件数达到了 78 个。但是我没有打开这么多的FD。你如何检查你的?

标签: cocoa exception core-data


【解决方案1】:

这并不是真正的核心数据问题,而是您的进程耗尽文件描述符的问题。

每个进程都有有限数量的文件描述符。如果你用完了,Core Data(和许多其他东西)将停止工作,因为它们无法再打开文件——任何它们都会失败。

首先,确保您没有泄漏文件描述符,即确保在不再需要文件时关闭它们。

我不确定您要跟踪的更改类型。看看Tracking File-System Changes

如果您使用的是 10.7,请查看调度源和 DISPATCH_SOURCE_TYPE_VNODE,这是一个非常强大的工具来跟踪文件系统更改(对应于 kqueue,但更易于使用)。

【讨论】:

    【解决方案2】:

    Core Data 在沙盒应用程序尝试将数据库保存到它没有完全读/写访问权限的位置时也会出现此错误(例如,如果用户打开文件,Core Data 将能够读取/write 这个文件,而不是其他任何东西到同一个文件夹)。

    Core Data 无法将临时_journal 文件写入此文件夹并报告此错误。

    【讨论】:

    • 我在保存到 coredata 时遇到这个错误,.. 如何解决这个问题.. 请帮助我,..
    • 您需要对保存位置具有完全的读/写权限。最好的选择是创建一个文件夹/包并将您的 CoreData 文件存储在那里。
    猜你喜欢
    • 2014-08-01
    • 2020-06-14
    • 2020-07-19
    • 2011-06-23
    • 1970-01-01
    • 2011-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多