Swift 核心数据轻量级迁移Xcode崩溃

Swift 核心数据轻量级迁移Xcode崩溃,swift,xcode,core-data,Swift,Xcode,Core Data,我正在尝试做一个非常简单的轻量级迁移,包括添加实体属性 在我的AppDelegate中,我有: lazy var persistentContainer: NSPersistentContainer = { let container = NSPersistentContainer(name: "app") container.loadPersistentStores(completionHandler: { (storeDescription, error)

我正在尝试做一个非常简单的轻量级迁移,包括添加实体属性

在我的AppDelegate中,我有:

lazy var persistentContainer: NSPersistentContainer = {
    let container = NSPersistentContainer(name: "app")
    container.loadPersistentStores(completionHandler: { (storeDescription, error) in
        if let error = error as NSError? {
            fatalError("Unresolved error \(error), \(error.userInfo)")
        }
    })
    return container
}()
我已经尝试创建一个新的.xcdatamodel,并在那里添加Entity属性,然后将
模型版本
更改为当前的新数据模型。我还尝试简单地将实体属性添加到现有的数据模型中

在这两种情况下,当我点击run时,Xcode崩溃了,而没有给我读取任何控制台输出的能力,因此我不知道如何前进。(我已经做了几十次了。)

我读到的所有内容似乎都表明,由于添加实体属性只是一个小改动,轻量级迁移应该可以工作,
应该自动地进行增量迁移
,而
应该自动地进行增量迁移
应该默认为
true

关于如何使用
addPersistentStore
执行轻量级迁移,有很多解释,但我没有使用;我正在使用
loadPersistentStores
,似乎我必须重构我的整个应用程序来改变这一点(而且,无论如何,一切似乎都表明
loadPersistentStores
是处理核心数据的新的/经批准的方式)

更新 根据其他一些SO帖子,我已将惰性初始化更新为以下内容:

lazy var persistentContainer: NSPersistentContainer = {
    let container = NSPersistentContainer(name: "app")
    let url = NSPersistentContainer.defaultDirectoryURL()
    let description = NSPersistentStoreDescription(url: url)
    description.shouldAddStoreAsynchronously = true
    description.shouldInferMappingModelAutomatically = true
    description.shouldMigrateStoreAutomatically = true
    description.isReadOnly = false
    container.persistentStoreDescriptions = [description]
    container.loadPersistentStores(completionHandler: { (storeDescription, error) in
        if let error = error as NSError? {
            fatalError("Unresolved error \(error), \(error.userInfo)")
        }
    })
    return container
}()
如果让error=error,我就在
处设置了一个断点,并且能够在Xcode崩溃之前捕获控制台。结果如下:

CoreData: warning:  View context accessed for persistent container app with no stores loaded
CoreData: warning:  View context accessed for persistent container app with no stores loaded
CoreData: error: -addPersistentStoreWithType:SQLite configuration:(null) URL:file:///var/mobile/Containers/Data/Application/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/Library/Application%20Support/ options:{
NSAddStoreAsynchronouslyOption = 1;
NSInferMappingModelAutomaticallyOption = 1;
NSMigratePersistentStoresAutomaticallyOption = 1;
NSReadOnlyPersistentStoreOption = 0;
}
... returned error Error Domain=NSCocoaErrorDomain Code=256 "The file couldn’t be opened." UserInfo={NSSQLiteErrorDomain=14, NSUnderlyingException=unable to open database file} with userInfo dictionary {
NSSQLiteErrorDomain = 14;
NSUnderlyingException = "unable to open database file";
}
(lldb)
但现在我(又)被卡住了。我无法想象为什么应用程序无法打开数据库文件,并且不知道如何确定是什么阻止了它。

Update 我从惰性初始化中删除了新代码,并将其简单地返回给:

lazy var persistentContainer: NSPersistentContainer = {
    let container = NSPersistentContainer(name: "bartender")
    container.loadPersistentStores(completionHandler: { (storeDescription, error) in
        if let error = error as NSError? {
            fatalError("Unresolved error \(error), \(error.userInfo)")
        }
    })
    return container
}()
我将断点放在同一个位置,这一次在控制台中发现了以下消息:Cannot migrate store in place:Validation error缺少强制目标属性上的属性值

这让我想到在我更新的实体的新属性中设置一个
默认值
,现在Xcode不再崩溃,所以问题似乎已经解决了