Database CoreData迁移新属性Swift
我在Swift中有一个CoreData数据库。我添加了一个新版本,其中我又添加了3个属性。问题是,如果用户在我向数据库添加新属性之前已经向数据库添加了一些值,那么应用程序将崩溃。这是因为我想读出整个数据库及其所有值。但是如果用户在我添加新版本之前添加了一些值,那么在新添加的属性中将没有值因此我读取了不包含任何值的属性。我是否可以更改它,使所有旧属性自动成为空字符串,这样它就不会崩溃?或者我可以捕获错误或其他信息吗?一种方法是编写一个读取器函数,该函数抛出错误,并在错误处理中调用另一个函数,该函数用于旧的输入。另外,如果你发布代码,会更容易帮助你Database CoreData迁移新属性Swift,database,swift,core-data,core-data-migration,Database,Swift,Core Data,Core Data Migration,我在Swift中有一个CoreData数据库。我添加了一个新版本,其中我又添加了3个属性。问题是,如果用户在我向数据库添加新属性之前已经向数据库添加了一些值,那么应用程序将崩溃。这是因为我想读出整个数据库及其所有值。但是如果用户在我添加新版本之前添加了一些值,那么在新添加的属性中将没有值因此我读取了不包含任何值的属性。我是否可以更改它,使所有旧属性自动成为空字符串,这样它就不会崩溃?或者我可以捕获错误或其他信息吗?一种方法是编写一个读取器函数,该函数抛出错误,并在错误处理中调用另一个函数,该函数
//error type
enum Error: ErrorType{
case OldInput
}
func fetchFromDatabase() throws {
//do you fetching
if //condition if the new attribute exists {
//fetch
return
}
throw Error.OldInput
}
//calling it
do {
try fetchFromDatabase()
} catch (error) {
fetchFromDatabaseOld()
}
您可以在模型中设置一个默认值,或者在代码中处理这种可能性,或者创建一个映射模型,通过my CoreData模型中的一个默认值创建它,然后删除可选的勾号。在此之前,我没有删除可选的勾号,它不起作用。