【问题标题】:How to eliminate core data sqlite warning message when application terminates?应用程序终止时如何消除核心数据sqlite警告消息?
【发布时间】:2018-06-10 20:02:11
【问题描述】:

自从升级到 High Sierra 后,当我的核心数据应用程序终止时,我一直收到以下警告:

libsqlite3.dylib 客户端中的错误:数据库完整性受到损害 API 违规:使用时 vnode 未链接

我没有看到任何实际问题,但我想知道是否有一些我应该在 applicationShouldTerminate() 中添加的拆解代码?

目前我所做的只是在返回 .terminateNow 之前保存上下文(如果它有更改)。

【问题讨论】:

  • 能否将您的标题从 error 更改为 warning?谢谢。它有所作为。
  • 已按要求更改。
  • 向我们展示你到目前为止所做的事情。
  • 几乎只是 managedObjectContext.commitEditing() 和 managedObjectContext.save() 以及一些错误处理。
  • “vnode unlinked”表示正在删除文件。

标签: swift macos sqlite cocoa core-data


【解决方案1】:

好的,我想通了。由于我的持久存储包含敏感数据,因此我将加密磁盘上的文件作为关闭前的最后一步。但是,Core Data 堆栈在关闭过程中此时仍在引用它们。

解决方案是在运行代码加密文件之前添加代码以删除持久存储。

    for store in managedObjectContext!.persistentStoreCoordinator!.persistentStores {
        try! managedObjectContext!.persistentStoreCoordinator!.remove(store)
    }

【讨论】:

    猜你喜欢
    • 2022-12-12
    • 1970-01-01
    • 1970-01-01
    • 2019-04-27
    • 2021-01-16
    • 2016-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多