Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/38.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
Iphone 核心数据迁移—这是一个简单的迁移吗?应该如何进行?_Iphone_Ios_Ipad_Core Data_Data Migration - Fatal编程技术网

Iphone 核心数据迁移—这是一个简单的迁移吗?应该如何进行?

Iphone 核心数据迁移—这是一个简单的迁移吗?应该如何进行?,iphone,ios,ipad,core-data,data-migration,Iphone,Ios,Ipad,Core Data,Data Migration,我在做什么: 我对核心数据非常陌生,我已经意识到我目前在应用程序中使用它的情况很不好。基本上,我有一个实体,它有四个不同的字符串属性。每次我使用数据库时,我都会用四个字符串中的每一个传递数组 现在,我要做的是向该实体添加更多属性。如果我可以向这个实体添加方法,以节省在不同类中使用数据库时的大量重复,那就太好了 所以,我认为最好的方法(也许我本来应该这样做)是使用Xcode为这个实体创建一个类——网上有很多关于这个的教程。这样,我就可以传递这个类的实例——比使用数组更干净 我被困的地方: 有没有

我在做什么:

我对核心数据非常陌生,我已经意识到我目前在应用程序中使用它的情况很不好。基本上,我有一个实体,它有四个不同的字符串属性。每次我使用数据库时,我都会用四个字符串中的每一个传递数组

现在,我要做的是向该实体添加更多属性。如果我可以向这个实体添加方法,以节省在不同类中使用数据库时的大量重复,那就太好了

所以,我认为最好的方法(也许我本来应该这样做)是使用Xcode为这个实体创建一个类——网上有很多关于这个的教程。这样,我就可以传递这个类的实例——比使用数组更干净


我被困的地方:

有没有一种简单的方法可以从当前的核心数据模型迁移到一个添加了属性和相应类的模型?我还希望在迁移过程中将现有字符串中的一个拆分为两个(将name拆分为first+last name)


我应该使用内置迁移工具吗?或者,我应该完全从头开始创建一个新的数据库模型,并构建一个自定义类来检查旧数据库,转换每个对象并将其存储在新数据库中吗?最好的方法是什么?因为我对数据库/核心数据不熟悉,我不想一开始就发现有一种更简单或更好的方法

您需要创建托管对象模型包,并启用迁移。这本质上允许您加载多个数据库模型以检索相同类型的数据。然后,您可以告诉托管对象上下文复制所有内容。更多信息:。

听起来我们的模型很简单。如果您所做的只是向现有模型添加几个属性,那么您可以进行轻量级迁移。这意味着CoreData将为您执行迁移

执行以下操作:
1.在Xcode中,单击您的模型。它应该具有.xcdatamodeld扩展名。 2.转到编辑器->模型版本并添加新模型,注意更改版本。 3.添加新属性。 4.确保将新属性添加到相关的托管对象子类中。 5.在持久性商店协调员实现中,最有可能是在应用程序代理中。确保添加选项NSMigratePersistentStoresAutomaticallyOption。您的代码应该如下所示:

NSPersistentStoreCoordinator *psc=persistentStoreCoordinator;
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
                              [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
                             [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption,nil];
    NSError *error=nil;
    if (![psc addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:options error:&error]) {
            // handle errors
    }
以下是苹果关于轻量级迁移的文档


祝你好运1

谢谢,那篇博文是一座金矿——我一直在寻找类似的东西,但没能找到。干杯