正確的方法是通過在生成的NSManagedObject子類中設置關係。我強烈建議您查看名爲mogenerator(http://rentzsch.github.io/mogenerator/)的工具,因爲這樣可以讓您不斷更改核心數據模型,而不會丟失添加到核心數據實體子類的所有自定義代碼。 Mogenerator可以設置爲在您更改模型時自動生成新的子類,而不會破壞您編寫來處理核心數據實體的自定義代碼。如果您計劃以認真的方式使用核心數據,那麼學習它是值得的。
要手動生成這些文件(不包含mogenerator),只需在XCode中單擊您的核心數據模型文件,選擇要爲其創建子類的實體,單擊「編輯器」菜單並選擇「創建NSManagedObject子類...'
這將創建兩個文件,EntityA.h和EntityA.m(或EntityB,取決於您在單擊菜單項時選擇了哪個實體)。再次爲其他實體生成其文件(注意:確保在生成這些文件之前已經建立了關係設置,否則將不得不重新生成它們),再次執行相同的過程。
然後我通常創建類的方法是這樣的:
//In EntityA.h
//between @interface and @end...
+ (EntityA*)createNewEntityAInContext:(NSManagedObjectContext*)context;
//In EntityA.m
+ (EntityA*)createNewEntityAInContext:(NSManagedObjectContext*)context
{
EntityA* aEntityAObject = [NSEntityDescription insertNewObjectForEntityForName:@"EntityA" inManagedObjectContext:context]
EntityB* aEntityBObject = [EntityB createNewEntityBInContext:context];
aEntityAObject.entityBLink = aEntityBObject;
return aEntityAObject;
}
//In EntityB.h
//between @interface and @end...
+ (EntityB*)createNewEntityBInContext:(NSManagedObjectContext*)context;
//In EntityB.m
+ (EntityB*)createNewEntityBInContext:(NSManagedObjectContext*)context
{
EntityB* aEntityBObject = [NSEntityDescription insertNewObjectForEntityForName:@"EntityB" inManagedObjectContext:context]
return aEntityBObject;
}
然後,您可以打電話給你+ createNewEntityAInContext:每當你想要一個新的對象和關係會自動創建方法。
關於您的其他問題,您要查找的內容稱爲定製核心數據遷移策略。你可以在谷歌搜索該主題的教程,並有很多鏈接。下面是我發現的第一眼看起來相當不錯:http://9elements.com/io/index.php/customizing-core-data-migrations/