Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database CoreData迁移新属性Swift_Database_Swift_Core Data_Core Data Migration - Fatal编程技术网

Database CoreData迁移新属性Swift

Database CoreData迁移新属性Swift,database,swift,core-data,core-data-migration,Database,Swift,Core Data,Core Data Migration,我在Swift中有一个CoreData数据库。我添加了一个新版本,其中我又添加了3个属性。问题是,如果用户在我向数据库添加新属性之前已经向数据库添加了一些值,那么应用程序将崩溃。这是因为我想读出整个数据库及其所有值。但是如果用户在我添加新版本之前添加了一些值,那么在新添加的属性中将没有值因此我读取了不包含任何值的属性。我是否可以更改它,使所有旧属性自动成为空字符串,这样它就不会崩溃?或者我可以捕获错误或其他信息吗?一种方法是编写一个读取器函数,该函数抛出错误,并在错误处理中调用另一个函数,该函数

我在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模型中的一个默认值创建它,然后删除可选的勾号。在此之前,我没有删除可选的勾号,它不起作用。