如何在应用程序终止时消除核心数据SQLite警告消息?

9
自从升级到High Sierra后,我的核心数据应用程序终止时就会收到这些警告:
BUG IN CLIENT OF libsqlite3.dylib: database integrity compromised by API violation: vnode unlinked while in use 我没有看到任何实际问题,但我想知道是否应该在applicationShouldTerminate()中添加一些拆除代码?
目前我所做的就是在返回.terminateNow之前保存上下文(如果有更改)。

请把您的标题从“error”改为“warning”,可以吗?谢谢。这会有所区别。 - user7014451
按照要求进行了更改。 - closetCoder
展示一下你目前为止所做的工作。 - El Tomato
主要就是使用 managedObjectContext.commitEditing() 和 managedObjectContext.save() 进行编程,同时进行一些错误处理。 - closetCoder
1
“vnode unlinked” 表示一个文件正在被删除。 - Tom Harrington
1个回答

9

好的,我已经搞清楚了。由于我的持久存储包含敏感数据,因此在关闭之前,我会将磁盘上的文件加密作为最后一步。然而,在关闭过程中,Core Data堆栈仍在引用它们。

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接