2013-01-17 42 views

回答

3

你可以問NSManagedObjectModel通過發送versionIdentifiers到接收器的。

- (NSSet *)versionIdentifiers 

的實況是here

+0

這工作,但值得注意的是,版本標識符默認爲空,因爲這裏要注意:http://stackoverflow.com/questions/3895156/nsmanagedobjectmodel-versionidentifiers,並在文檔中,所以爲了確定模型就變了,我不得不手動設置versionIdentifiers爲objectModel,然後比較它與存儲在別處(例如NSUserDefaults的)的值。 – Ampers4nd

4

你可以得到的型號名稱,並用它來代替型號的標識符。看看這個優秀的文章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; 
} 


遷移時,源模型名稱和目的地型號名稱將不同。否則,名稱將會相同。