2016-12-02 82 views
0

我的工作是使用下面的方法來確定是否需要一個核心數據遷移應用程序:爲什麼isConfiguration:compatibleWithStoreMetadata返回yes,即使使用映射模型?

- (BOOL)isMigrationNeeded { 
    BOOL isMigrationNeeded = NO; 
    NSError *error; 
    NSDictionary *sourceMetadata = [self sourceMetadata:&error]; 
    if (sourceMetadata != nil) { 
     NSManagedObjectModel *destinationModel = [self managedObjectModel]; 
     isMigrationNeeded = ![destinationModel isConfiguration:nil 
            compatibleWithStoreMetadata:sourceMetadata]; 
    } 

    return isMigrationNeeded; 
} 

在數據庫的最新版本中,增加一個屬性,需要一個映射模型來設置其值。即使isConfiguration:compatibleWithStoreMetadata返回YES,該屬性的值也會正確設置。結果,應用映射模型的代碼永遠不會被調用。

核心數據是否自動應用映射模型?

當數據庫從最新版本遷移時,這一切都正常。但是我測試了從舊版數據庫遷移並且未能設置新屬性的值。

我想嘗試在教程中找到的遞歸核心數據遷移方法,但如果isConfiguration:compatibleWithStoreMetadata返回YES,它將不會執行任何操作。

我會很樂意提供任何必要的附加信息。

回答

0

我的代碼中的其他地方存在一個錯誤,它在isConfiguration:compatibleWithStoreMetadata被調用之前用新版本的模型重寫了舊版本的模型。

所以isConfig ...正確返回是。

我的不好!

相關問題