我已经对我的模型进行了一些更改Core Data
,我们正在处理迁移,如下所述:轻量级迁移。
这不是问题。但是,我想根据当前模型版本对我的数据进行一些其他更新。如何获取当前模型版本的名称?我希望看到类似的东西:
[[NSBundle mainBundle] currentDataModelName]
但我似乎找不到它。任何人都可以帮忙吗?
您可以获取模型名称并使用它来代替模型标识符。查看这篇出色的文章Custom Core Data Migrations和相应的Github 代码。借助 NSManagedObjectModel+MHWAdditions 类别,您可以检索模型名称。
源模型名称:
NSError *error;
NSString *storeType = ...;
NSURL *storeURL = ...;
NSDictionary *sourceMetadata = [NSPersistentStoreCoordinator metadataForPersistentStoreOfType:storeType
URL:storeURL
error:&error];
NSManagedObjectModel *sourceModel = [NSManagedObjectModel mergedModelFromBundles:@[[NSBundle mainBundle]]
forStoreMetadata:sourceMetadata];
NSString *sourceModelName = [sourceModel mhw_modelName];
目标型号名称:
NSString *destinationModelName = [[self managedObjectModel] mhw_modelName];
假设您实现了一个managedModelObject
吸气剂。如果没有,这里是开箱即用的实现。
- (NSManagedObjectModel *)managedObjectModel {
if (_managedObjectModel != nil) {
return _managedObjectModel;
}
NSString *momPath = [[NSBundle mainBundle] pathForResource:@"YourModel" ofType:@"momd"];
if (!momPath) {
momPath = [[NSBundle mainBundle] pathForResource:@"YourModel" ofType:@"mom"];
}
NSURL *url = [NSURL fileURLWithPath:momPath];
_managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:url];
return _managedObjectModel;
}
迁移时,源模型名称和目标模型名称将不同。否则,名称将相同。