2011-10-21 67 views
2

由於我對CoreData相當陌生,並且來自MySQL-DB背景,因此CoreData Moddeling在某些時候很難理解。我相信你可以幫助我解決這個基本問題。CoreData基礎知識 - 對多關係數組數據

CoreData modeling

CoreData模型描寫的特徵: 我的數據庫模型主要由兩個實體組成。第一個叫做「經理」,第二個叫做「Zipcodes」。 「經理」有3個屬性,目前可忽略不計。我認爲重要的是這種關係稱爲「郵編」。 「Zipcodes」實體有一個叫做zip的屬性,它是一個16 int。它也有一個關係,叫做「​​經理」。

不,我會做到這一點:每位經理都有多個zicode,負責所有銷售。現在的問題是我已經設置了一個經理實體,並且想要將多個ziplcodes鏈接到他。每個管理員的郵編分隔在一個逗號分隔的字符串中。 (12345,56789,...)

首先,我創建一個經理實體。

Manager *manager = [NSEntityDescription insertNewObjectForEntityForName:@"Manager" inManagedObjectContext:self.managedObjectContext]; 

下一步是將所有zicodes分離到一個數組。

Manager *manager = [NSEntityDescription insertNewObjectForEntityForName:@"Manager" inManagedObjectContext:self.managedObjectContext]; 

NSArray *zipcodesArray = [[dict objectForKey:@"zipcodes"] componentsSeparatedByString:@","]; 

for (NSString *zip in zipcodesArray) { 
    ??? 
} 

所以現在這就是我卡住的地步。後來我必須通過searchBar檢查郵編,他們應該在數據庫中分開。我現在必須爲每個郵政編碼創建一個managedObjectModel嗎?我如何將他們全部與「一個」經理實體連接?我確信有辦法實現這一點,但我不知道如何。

希望我的問題是可以理解的。如果有什麼你想知道的,隨時提問。

謝謝你們!

回答

3
for (NSString *zip in zipcodesArray) { 
    NSManagedObject* zipcode = [NSEntityDescription insertNewObjectForEntityName:@"Zipcode" 
                inManagedObjectContext:self.managedObjectContext]; 
    [zipcode setValue:zip forKey:@"zip"]; 
    [zipcode setValue:manager forKey:@"manager"]; 
} 

通過建立從郵政編碼到最後一行的管理者的關係,核心數據將自動插入到郵編從經理回郵編關係的照顧。

+0

啊,相反。我一直認爲經理和郵政編碼的種類很多。所以我想我必須從經理 - >郵政編碼進行連接。謝謝你的幫助!對此,我真的非常感激!順便說一下,我可以在事後更新實體關係嗎? – rdesign

+1

真的沒有「事後」。每次您設置郵編的經理字段時,關係(在兩個方向上)都會更新。順便說一下,如果您願意,還可以修改關係的另一端。在這種情況下,你想做'NSMutableSet * zipCodes = [manager mutableSetValueForKey:@「zipcodes」];'在此之後,你可以修改可變集以修改與管理器相關聯的一組郵政編碼(再次,從郵編到經理將自動設置)。 – edsko

0

創建一個管理對象實例Zipcode。將該對象的zip屬性設置爲zipcodesArray中字符串的值。完成後,將託管對象保存到數據存儲區,檢查錯誤,然後重複,直到完成整個郵政編碼陣列。

+0

感謝您的回答。但是如何將所有的郵編管理對象實例連接到管理器管理對象?稍後我應該能夠搜索所有郵編並找到合適的經理。 – rdesign

+0

它看起來像edsko寫了我的答案等效的代碼。看看那個。 –