4

我已经对我的模型进行了一些更改Core Data,我们正在处理迁移,如下所述:轻量级迁移

这不是问题。但是,我想根据当前模型版本对我的数据进行一些其他更新。如何获取当前模型版本的名称?我希望看到类似的东西:

[[NSBundle mainBundle] currentDataModelName]

但我似乎找不到它。任何人都可以帮忙吗?

4

2 回答 2

6

您可以获取模型名称并使用它来代替模型标识符。查看这篇出色的文章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;
}


迁移时,源模型名称和目标模型名称将不同。否则,名称将相同。

于 2015-05-10T07:02:34.660 回答
4

您可以NSManagedObjectModel通过发送versionIdentifiers给接收者来询问您的。

- (NSSet *)versionIdentifiers

文档在这里

于 2013-01-17T23:40:13.360 回答