的名字,和我們正在處理這裏描述的遷移: Lightweight Migration。找我做了一些改變,我<code>Core Data</code>模型當前的核心數據模型
這不是一個問題。但是,我想對當前模型版本的數據進行一些其他更新。我如何獲得當前模型版本的名稱?我期望看到類似的東西:
[[NSBundle mainBundle] currentDataModelName]
但我似乎無法找到它。誰能幫忙?
的名字,和我們正在處理這裏描述的遷移: Lightweight Migration。找我做了一些改變,我<code>Core Data</code>模型當前的核心數據模型
這不是一個問題。但是,我想對當前模型版本的數據進行一些其他更新。我如何獲得當前模型版本的名稱?我期望看到類似的東西:
[[NSBundle mainBundle] currentDataModelName]
但我似乎無法找到它。誰能幫忙?
你可以得到的型號名稱,並用它來代替型號的標識符。看看這個優秀的文章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;
}
遷移時,源模型名稱和目的地型號名稱將不同。否則,名稱將會相同。
這工作,但值得注意的是,版本標識符默認爲空,因爲這裏要注意:http://stackoverflow.com/questions/3895156/nsmanagedobjectmodel-versionidentifiers,並在文檔中,所以爲了確定模型就變了,我不得不手動設置versionIdentifiers爲objectModel,然後比較它與存儲在別處(例如NSUserDefaults的)的值。 – Ampers4nd