ios - viewContext 未保存在数据库中 (app.sqlite)

标签 ios swift core-data persistence

我使用 NSPersistanceContainer 创建了一个应用程序来保存学生的详细信息,当我从 JSON 获取数据并保存到数据库时,那时我得到的获取结果计数 > 0。如果我重新启动应用程序获取结果计数返回 0。

lazy var persistentContainer: NSPersistentContainer = {

    let container = NSPersistentContainer(name: "Students_dev")

    let storeURL = try! FileManager
        .default
        .url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true)
        .appendingPathComponent("Students_dev.sqlite")
    print("URL :",storeURL)

    let storeDescription = NSPersistentStoreDescription(url: storeURL)
    storeDescription.shouldMigrateStoreAutomatically = true
    storeDescription.shouldMigrateStoreAutomatically = true
    container.viewContext.automaticallyMergesChangesFromParent = true
    container.persistentStoreDescriptions = [storeDescription]

    container.loadPersistentStores(completionHandler: { (storeDescription, error) in
        if let error = error as NSError? {
            fatalError("Unresolved error \(error), \(error.userInfo)")
        }
    })
    return container
}()

// MARK: - Core Data Saving support

func saveContext (context: NSManagedObjectContext) {
   
   persistentContainer.performBackgroundTask({ (context) in
        if context.hasChanges {
            do {
                try context.save()
            } catch {
                let nserror = error as NSError
                fatalError("Unresolved error \(nserror), \(nserror.userInfo)")
            }
        }
    })
}

当我保存到数据库时,上下文不为空,当我检查 sqlite 文件时,表为空。没有得到我这边缺少的东西。

没有数据被插入到 SQL 文件中 screenshot of sql log

最佳答案

我认为 CoreData 警告的原因是这行代码:

container.viewContext.automaticallyMergesChangesFromParent = true

您正在加载商店之前访问 viewContext。尝试将该行移动到加载持久存储完成 block 中:

container.loadPersistentStores(completionHandler: { (storeDescription, error) in
    if let error = error as NSError? {
        fatalError("Unresolved error \(error), \(error.userInfo)")
    }
    container.viewContext.automaticallyMergesChangesFromParent = true
})

关于ios - viewContext 未保存在数据库中 (app.sqlite),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46990625/

相关文章:

iphone - iOS - 在 Xcode 中更新配置文件的过程是什么

ios - 在 Xcode 之外自动上传 NewRelic dSYM?

ios - 应用程序图标没有刷新

ios - App Store Connect 操作错误 : ITMS-90164 [] for key com. apple.developer.healthkit.access

objective-c - 如何检测 OS X 上的麦克风使用情况?

objective-c - 删除和重新部署应用程序后 iOS CoreData + iCloud 中的错误消息

iphone - 直接从 Core Data 获取的具有多对多的单个 UITableView

ios - 检查 iOS 设备代数

Swift (4) 无法转换为泛型基类?

ios - 快速同步网络请求