2013-05-09 90 views
1

我試圖歸檔輕量級遷移後的一些處理。我已經做了輕量級的過程,我現在需要一些幫助來處理我的實體。CoreData輕量級遷移+自定義

在舊模型上,我曾經有一個實體「汽車」,現在我添加實體「人」的關係人有汽車。

因此,輕量級遷移後,我需要添加一個默認的人「約翰」,並添加所有的汽車給他。

有沒有人有一些想法?

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator 
{ 
    if (_persistentStoreCoordinator != nil) { 
     return _persistentStoreCoordinator; 
    } 

    NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"CoreData.sqlite"]; 

    NSError *error = nil; 
    _persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]]; 

    NSDictionary *options = @{ 
           NSMigratePersistentStoresAutomaticallyOption : @YES, 
           NSInferMappingModelAutomaticallyOption : @YES 
           }; 


    if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error]) { 
     NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
     abort(); 
    } 

    return _persistentStoreCoordinator; 
} 

回答

2

如果輕量級遷移即將發生,您可以捕獲。詳情請見this回答。在那裏你可以設置一個標誌,並在正常啓動之後執行一個方法,插入所需的實體。

注意,雖然,輕量級遷移需要遷移的所有現有實體新店版本,所以通常有沒有邏輯上令人信服的理由用這個鉤子。相反,如果包含「約翰」和他的汽車,並且如果不包含,他們會冷查詢您的(新版或舊版)商店。

+0

感謝您的幫助。如果將來我做了我的模型的另一個版本呢?有什麼方法可以跟蹤?就像,如果我升級到V2插入約翰,如果升級到V3插入文森特? – 2013-05-09 16:14:07

+0

是的,您可以隨時查詢「NSObjectModel」的版本,如其他答案中所述。 – Mundi 2013-05-09 22:45:28