ios - 我必须在第一个版本中启用版本控制才能在后续版本中使用轻量级迁移吗?

标签 ios core-data versioning core-data-migration

我担心的是后续版本中数据模型的变化。

我在 Xcode 中创建了一个新的 xcdatamodel 文件,默认情况下该文件没有版本控制。我知道你可以点击某个地方并将其设为“第一个版本”。在“组和文件”树中,xcdatamodel 文件左侧有一个黑色粗箭头,您可以单击该箭头查看内部的所有版本。

我的文件没有那个粗箭头,因此没有版本控制。

这会导致以后出现大问题吗?是否需要从一开始就对其进行版本控制,以便以后能够进行轻量级迁移?应用程序交付给用户后,就无法再更改。

最佳答案

您无需在第一个版本中设置轻量级迁移。当您决定迁移时,您需要做两件事。首先,您必须保留数据模型的每个版本的副本。这些模型通常保存在 .xcdatamodeld 文件中。或者,您可以只保留一堆 .xcdatamodel 文件。但是,最好使用 .xcdatamodeld 文件来保持一切井井有条。其次,您必须使用持久存储协调器激活轻量级迁移。创建持久存储协调器时,您将执行如下操作:

__persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];

// Automatically migrates the model when there are small changes.
NSDictionary * options = [NSDictionary dictionaryWithObjectsAndKeys:
                          [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
                          [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, 
                          nil];
[__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType 
                                           configuration:nil 
                                                     URL:storeURL 
                                                 options:options 
                                                   error:&error];

请记住,轻量级迁移只能做这么多。如果您需要进行较大的更改,那么您将需要创建一个映射模型。

关于ios - 我必须在第一个版本中启用版本控制才能在后续版本中使用轻量级迁移吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6029703/

相关文章:

iphone - 如何更改 uinavigationbar 后退按钮文本

iphone - ios-coredata : what's the difference between in-memory tracking and full persistent tracking?

ios - 将 Google Analytics 添加到项目后 CoreData 方法出错

iOS : Core Data: How to retain an ordered set of objects in a managed object

php - 频繁更新 PHP 脚本和 MYSQL 表时维护 iOS 中的用户体验

javascript - 网站导航在 WKWebview 中不起作用

objective-c - UIPopover已重新定位,但位置错误

core-data - 在 Mac 上以 UTF-8 格式保存 CSV

versioning - 哪些NoSQL数据库(类别)支持版本控制?

python - 如何从 `src/`目录下的python包访问项目根目录中的文本文件