我对Core Data
模型进行了一些更改,我们正按照此处所述处理迁移: Lightweight Migration。
这不是问题。但是,我想对我的数据进行一些其他更新,这些更新是以当前模型版本为条件的。如何获取当前型号的名称?我希望看到类似的东西:
[[NSBundle mainBundle] currentDataModelName]
但我似乎无法找到它。有人可以帮忙吗?
答案 0 :(得分:5)
您可以获取模型名称并使用它而不是模型标识符。查看这篇优秀文章Custom Core Data Migrations和相应的Github code。在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;
}
迁移时,源模型名称和目标模型名称将有所不同。否则,名称将相同。
答案 1 :(得分:3)