我已经对Core Data模型进行了一些更改,并且我们正在按如下所述处理迁移:轻量级迁移。
那不是问题。但是,我想对数据进行其他一些更新,这些更新取决于当前模型版本。如何获得当前模型版本的名称?我希望看到类似的东西:
[[NSBundle mainBundle] currentDataModelName]
Run Code Online (Sandbox Code Playgroud)
但我似乎找不到。有人可以帮忙吗?
您可以获取模型名称并使用它代替模型标识符。查阅这篇出色的文章“ 自定义核心数据迁移”和相应的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];
Run Code Online (Sandbox Code Playgroud)
目标型号名称:
NSString *destinationModelName = [[self managedObjectModel] mhw_modelName];
Run Code Online (Sandbox Code Playgroud)
假设您实现了一个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;
}
Run Code Online (Sandbox Code Playgroud)
迁移时,源模型名称和目标模型名称将有所不同。否则,名称将相同。
您可以NSManagedObjectModel通过发送versionIdentifiers给接收者来询问。
- (NSSet *)versionIdentifiers
Run Code Online (Sandbox Code Playgroud)
文档在这里
| 归档时间: |
|
| 查看次数: |
3279 次 |
| 最近记录: |