2010-09-10 137 views
2

我需要添加一些屬性到我的核心數據模型,我有一個可怕的時間讓輕量級遷移工作!核心數據輕量級遷移 - 無論合併模型

我不斷收到錯誤「不能合併模型與兩個不同的實體命名等等」。

這裏是我做了什麼......

  1. 將此代碼添加到我的應用程序委託。

    • (NSPersistentStoreCoordinator *)persistentStoreCoordinator {

      //等等等等

      的NSDictionary *選項= [NSDictionary的dictionaryWithObjectsAndKeys:
      [NSNumber的numberWithBool:YES],NSMigratePersistentStoresAutomaticallyOption,
      [NSNumber的numberWithBool :YES],NSInferMappingModelAutomaticallyOption,nil];

      //等等等等

      return _persistentStoreCoordinator;
      }

  2. 點擊了我的數據模型,去設計>數據模型>添加模型版本。

  3. 對LOWEST數字進行了修改,基本上添加了一些屬性。

  4. 刪除我之前的模型生成的所有託管文件,將它們發送到垃圾箱,然後從新模型創建新的託管文件。

  5. 清理了所有目標。

  6. 建立和去。

錯誤。

請幫忙。我以各種不同的方式嘗試了上述方法,並加載了其他的東西,每次回到我的項目的一個乾淨的副本並重新開始,沒有任何東西讓我超過這個錯誤。

謝謝!

回答

4

好吧,再一次,我的生命的另一個6小時完全浪費了,因爲蘋果是一堆......呃,我會在那裏停下來。

無論如何,感謝這個可愛的人:http://linkroller.com/fullpage/ad/13754/?http://iphonedevelopment.blogspot.com/2009/09/core-data-migration-problems.html我能夠解決這個問題。

你跟我已經遵循的步驟,那麼你需要找到以下方法:

- (NSManagedObjectModel *)managedObjectModel { 

    if (managedObjectModel != nil) { 
     return managedObjectModel; 
    } 

    managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain];  
    return managedObjectModel; 
} 

並將其更改爲:

- (NSManagedObjectModel *)managedObjectModel { 

    if (managedObjectModel != nil) { 
     return managedObjectModel; 
    } 

    NSString *path = [[NSBundle mainBundle] pathForResource:@"Foo" ofType:@"momd"]; 
    NSURL *momURL = [NSURL fileURLWithPath:path]; 
    managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:momURL]; 

    return managedObjectModel; 
} 

其中foo是你的名字xcdatamodeld文件。

AAAAAARGH。

1

我有固定的核心數據遷移

請follwing這個步驟

  1. 轉到AppDelegate.m寫功能

    -(NSPersistentStoreCoordinator *)persistentStoreCoordinator 
    { 
        if (__persistentStoreCoordinator != nil) 
        { 
        return __persistentStoreCoordinator; 
        } 
    
         NSString *databaseFilePath = [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"sampleiOS.sqlite"]; 
    
         NSURL *storeUrl = [NSURL fileURLWithPath: databaseFilePath]; 
    
         NSDictionary *_option = [NSDictionary dictionaryWithObjectsAndKeys: 
            [NSNumber numberWithBool:YES],   NSMigratePersistentStoresAutomaticallyOption, 
            [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil]; 
         NSError *error = nil; 
    
         __persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]]; 
    
         if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:_option error:&error]) { 
    
    NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
    
        } 
    
        return __persistentStoreCoordinator; 
    } 
    
  2. 然後選擇example.xcdatamodeld文件

  3. 單擊頂部的編輯器菜單=>添加模型版本=>創建新的模型版本「example 2.xcdatamodel」,然後單擊完成按鈕。

  4. 現在顯示兩個核心數據模型版本一是源「example.xcdatamodel」另一個是目標「示例2.xcdatamodel」。

  5. 現在在您的新版本datamodel「example 2.xcdatamodel」中添加屬性或實體。然後單擊組數據模型「example.xcdatamodeld」。之後,將當前版本設置爲新創建的數據模型「example2.xcdatamodel」。

如何設置當前版本

選擇顯示公用事業=>顯示檢查=>版本的核心數據模型。然後設置當前版本。