2012-09-05 87 views
0

我想了解核心數據(多對多)關係。在下面的代碼,我有兩個實體核心數據中沒有得到多對多關係

PeopleList < - >> TransactionDetails

NSManagedObjectContext *context = [self managedObjectContext]; 
NSManagedObject *personDetails = [NSEntityDescription 
            insertNewObjectForEntityForName:@"PeopleList" 
            inManagedObjectContext:context]; 

[personDetails setValue:[person fullName] forKey:@"name"]; 

NSManagedObject *transactionDetails = [NSEntityDescription 
             insertNewObjectForEntityForName:@"TransactionDetails" 
             inManagedObjectContext:context]; 


[transactionDetails setValue:[NSNumber numberWithFloat:oweAmount] forKey:@"amount"]; 

NSError *error; 
if (![context save:&error]) { 
    NSLog(@"Whoops, couldn't save: %@", [error localizedDescription]); 
} 

下面這段代碼插入一個新的對象(行)的模型。我感到困惑的是: 1.我不必爲兩個實體(PeopleList和TransactionDetails)中的相關對象值編寫代碼嗎? 2.如果我一次又一次地運行此代碼,它只是繼續在第一個實體(PeopleList)中添加相同的對象。如何寫多對多關係?我可以從最近幾個小時的閱讀中得到的是,我必須獲取結果,搜索該特定對象,如果存在,則不插入具有相同名稱的新對象。但在那種情況下,它將如何與兩個實體相關聯。

回答

0

就模型編輯器而言,就多對多關係而言,您的模型實體是否正確連線?你是否爲你的實體生成了類文件?如果您可以回答兩個問題,您可以像創建人員實體一樣創建人員實體,也可以創建具體實體,但您需要將詳細信息提供給您的人員列表。查看方法名稱的類文件。

0

它不會,因爲你沒有在任何一個對象上設置關係。我沒有看到你正在設置新鑄造的TransactionDetail對象的PeopleList屬性(對不起,我不知道你是如何獲得在你的模型中命名的屬性,所以我只是使用類名)。因此,在創建transactionDetails對象之後,您需要執行諸如transactionDetails.PeopleList = personDetails之類的操作,並且這兩個關係都將設置爲該點; transactionDetails.PeopleList屬性將指向您的personDetails對象,而personDetails.TransactionDetails集合將包含transactionDetails。

你的個人對象是什麼,你用來設置名字?

另一方面,你可能會考慮將所有這些東西都移到NSManagedObject的子類中;爲你的每個實體編寫自己的超級簡單構造函數/初始化函數等。許多人從來不這樣做,最終拋棄了許多CoreData鍋爐板的控制器代碼,這對我來說是一個謎,因爲這使得使用CoreData非常好。