モデル名を取得して、モデル識別子の代わりに使用できます。この優れた記事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;
}
移行する場合、移行元のモデル名と移行先のモデル名が異なります。それ以外の場合、名前は同じになります。