2011-09-21 44 views
0

我會簡化這一點。我是Core Data的新手,我在想我缺少技術性。所以請裸露我設置核心數據關係重用相同的對象刪除以前的關係

我從一個Web服務導入數據,在這樣的數據我有一個類樹。

例如:

     餐廳
          - 意大利
          - 墨西哥
          - 牛排

在我的模型中,我設置了一個名爲ParentCategory的關係,它帶有一個名爲Subcategories的反向關係。目前爲止,一切都很好。

現在,當我輸入我的類別我做這樣的事情:(注:我的代碼不會這個樣子我已經改變了它舉例說明我的問題)

NSEntityDescription *categoryEntity = [NSEntityDescription entityForName:@"Categories" inManagedObjectContext:context]; 

NSDescription *parentCategory = [NSEntityDescription insertNewObjectForEntityForName:[categoryEntity name] inManagedObjectContext:context] 

//Then I actually set some values for parentCategory. 
//Then create the subcategories. 

NSDescription *italianDescription = [NSEntityDescription insertNewObjectForEntityForName:[categoryEntity name] inManagedObjectContext:context]; 
[italianDescription objectForKey:@"Italian" forKey:@"name"]; 

//Set the relationship 
[italianDescription objectForKey:parentCategory forKey:@"ParentCategory"]; 

//All this works great but then when 
NSEntityDescription *mexicanDescription = [NSEntityDescription insertNewObjectForEntityForName:[categoryEntity name] inManagedObjectContext:context]; 
[mexicanDescription objectForKey:@"Mexican" forKey:@"name"]; 
[mexicanDescription objectForKey:parentCategory forKey:@"ParentCategory"]; 

好像當最後一行代碼運行它將從「italianDescription」中刪除關係,因此在保存我的上下文後,它會顯示它沒有父類別。我從我的Web服務中刪除了一些數據,只有最後一個我設置父類別對象X的關係的子類別保留了它。以前的所有將會失去它。

我檢查了蘋果開發者文檔,它並沒有真正的幫助。話雖如此,我該如何克服這一點?或者什麼是一種有效的方式來與關係進口。

謝謝你的時間。

+0

請添加到您的問題 - 您的類別實體的定義,以及您的實際代碼。 – Perception

回答

1

我不認爲你進行任何設置,爲NSManagedObjects設定值的方式是相反的

setValue: forKey: 

NSDescription *的,你應該使用NSManagedObject *

你可能想看看轉換爲實體的子類,因爲它可以更容易地訪問和設置屬性。在這種情況下,它將是

MyCustomEntity* myobj=[NSEntityDescription insertNewObjectForEntityForName:@"MyentityName" inManagedObjectContext:context]; 

然後,您可以通過使用它的點符號或消息傳遞的屬性來設置值。你可以通過在覈心數據編輯器中選擇實體來實現這一點,然後在菜單欄的編輯器下面有一個選項來創建一個NSManagedObject子類,在創建之後你需要告訴實體它現在有一個自定義類。這是在右側Utiliies欄下的Entity實現的一個Class字段,只需輸入你的新類的名稱,它應該被設置。

+0

我正在設置關係。運行後,我的導入信息進入數據庫,只有最後一個父類別關係在那裏。 據我所知,NSEntityDescription將負責爲我創建託管對象。檢查 中的第一塊代碼http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdCreateMOs.html – Ares

+0

@Ares,您的父類別是一對多關係船?如果它是一對一的,那麼在最後設置它會替換它的當前值。 – utahwithak

+0

這是一對一的,一個類別只能有一個父類別。由於類別可以有許多子類別,因此反向(子類別)是一對多的。 其實,我只是檢查了一下,倒數設置爲一對一。 :)這是做到了。謝謝cwieland。有時我們可以忽略一些簡單的事情,這很有趣。 – Ares