swift - 应用程序终止时如何消除核心数据sqlite警告消息?

标签 swift macos sqlite cocoa core-data

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

BUG IN CLIENT OF libsqlite3.dylib: database integrity compromised by API violation: vnode unlinked while in use

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

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

最佳答案

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

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

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

关于swift - 应用程序终止时如何消除核心数据sqlite警告消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48038534/

相关文章:

ios - 使用 SwiftUI 从结构中的完成变量调用方法

ios - 推送到 Controller 并设置 hidesBottomBarWhenPushed 后 UILabel 错位

swift - 在 Swift 4 中设置 NSMenuItem 修饰符导致 "Type of expression is ambiguous"

python - 从字符串中解析日期并使用 Sqlalchemy tosqlite 插入

ruby-on-rails - rake 数据库 :migrate error "don' t know how to build task"

linux - 如何创建新的 Sqlite 元命令

macos - NSTableView 中的自定义 NSView 不显示所有 subview

macos - 在 Mac OS X 上的命令行上编辑资源分支

cocoa - applicationDidFinishLaunching : executing after NSDocument is loaded from NIB

ios - Firebase - 下载几个文件