0

我已经在我的应用程序中使用标准设置的核心数据很长时间了,但是当我更改 NSPersistentContainer 时,所有内容都被删除了。我预计新的 NSPersistentContainer 会是空的,但是当我回到原来的 NSPersistentContainer 时,现在那里也没有任何东西(之前有超过 10,000 个对象)

原始标准设置

lazy var persistentContainer: NSPersistentContainer = {

    let container = NSPersistentContainer(name: "MyApp")

    container.loadPersistentStores(completionHandler: { (storeDescription, error) in
        if let error = error as NSError? {

            fatalError("Unresolved error \(error), \(error.userInfo)")
        }
    })
    return container
}()

但是,当我使用以下代码更改 Persistent 容器以与扩展程序共享应用程序数据时,应用程序数据似乎全部消失了。

lazy var persistentContainer: NSPersistentContainer = {

    let container = NSCustomPersistentContainer(name: "MyApp")
    container.loadPersistentStores(completionHandler: { (storeDescription, error) in
        if let error = error as NSError? {

            fatalError("Unresolved error \(error), \(error.userInfo)")
        }
    })
    return container
}()

class NSCustomPersistentContainer: NSPersistentContainer {

    override open class func defaultDirectoryURL() -> URL {
        var storeURL = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.MyApp")
        storeURL = storeURL?.appendingPathComponent("MyApp.sqlite")
        return storeURL!
    }

}

当我回到使用以前的设置时 - 即

let container = NSPersistentContainer(name: "MyApp")

代替

let container = NSCustomPersistentContainer(name: "MyApp")

没有从数据库返回数据。是否有可能改变持久化容器的位置真的可以删除原始容器中的所有数据。我以为它会创建两个单独的容器,所以我可以切换回原来的容器,一切都会在那里。

4

0 回答 0