0

我剛剛發佈了一款名爲Twinstones的應用程序,並且我不斷更新它,但是現在我希望更新我的Core Data模型對象。當用戶第一次打開應用程序(基本上每次都是)後,我使用一個NSUserDefaults對象來檢查我的模型對象是否已經進行了初始設置。如果默認對象的值爲0,則初始化設置,如果爲1,則忽略該設置。如何爲現有應用程序的新實體實施核心數據遷移(如果有必要)

在這一點上,顯然,已經完成了所有70個下載遊戲的人的初始設置。

我想爲第一級的教程添加一個實體,並使用Core Data來跟蹤教程是否已被查看,這意味着我必須將現在的舊模型對象遷移到此新的實體。在開始之前,我是否應該使用另一個NSUserDefault對象(以與初始設置相同的方式應用)來確定是否在第一級上運行教程?

如果不是,這是我對管理對象上下文代碼,管理對象模型和持久存儲協調:

- (NSManagedObjectContext *)managedObjectContext 
{ 
    if (_managedObjectContext != nil) { 
     return _managedObjectContext; 
    } 

    NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator]; 
    if (coordinator != nil) { 
     _managedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType]; 
     [_managedObjectContext setPersistentStoreCoordinator:coordinator]; 
    } 
    return _managedObjectContext; 
} 

// from website 
- (NSManagedObjectModel *)managedObjectModel 
{ 
    if (_managedObjectModel != nil) { 
     return _managedObjectModel; 
    } 
    NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"ScoreModel" withExtension:@"momd"]; 
    _managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL]; 
    return _managedObjectModel; 
} 

// from website 
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator 
{ 
    if (_persistentStoreCoordinator != nil) { 
     return _persistentStoreCoordinator; 
    } 
    NSURL *storeURL = [[self applicationDocumentsDirectory] 
        URLByAppendingPathComponent:@"Twinstones.sqlite"]; 
    NSError *error = nil; 
    _persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]]; 
    if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType 
               configuration:nil 
                 URL:storeURL 
                options:nil 
                 error:&error]) { 
     NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
     abort(); 
    } 
    return _persistentStoreCoordinator; 
} 

在我persistantStoreCoordinator方法,我將如何實施遷移?鑑於默認對象已經通過初始化,我覺得我不得不添加另一個默認對象,獲取對當前模型對象的引用,將其遷移並添加新的實體。

我從來沒有真正做過這個,所以真正破解了代碼(如果再次,這種遷移甚至是必要的)。如果我只能使用另一個NSUserDefaults對象,並且保證其存儲數據的屬性列表不會意外變得惡意,那麼我會這樣做。

回答

0

使用以下詞典:

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

爲您的配置選項,當您添加商店的persistentStoreCoordinator

相關問題