获取当前核心数据模型的名称

时间:2013-01-17 20:23:47

标签: ios core-data

我对Core Data模型进行了一些更改,我们正按照此处所述处理迁移: Lightweight Migration

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

[[NSBundle mainBundle] currentDataModelName]

但我似乎无法找到它。有人可以帮忙吗?

2 个答案:

答案 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)

您可以通过向接收方发送NSManagedObjectModel来询问您的versionIdentifiers

- (NSSet *)versionIdentifiers

文件是here