2013-07-17 33 views
0

是否可以刪除和閱讀關係?Coredata刪除並閱讀關係

我不能在這裏發佈代碼,因爲它是一個非常複雜的過程的巨大項目。假設我有tableA < - >> tableB tableB得到更新(即tableB對象將被刪除並添加新的obejcts(re))。我檢查tableA中的對象是否與tableB有關係,我已經在具有服務器對象id的數組中存在這個關係。我現在讀取tableB中的數據並讀取關係。該關係出現故障,無法訪問。添加或刪除對象後,我將其保存。我究竟做錯了什麼?

+0

因爲您刪除了對象,所以關係出現故障。如果您希望關係存在於新的tableB對象中,則必須在刪除對象之前傳輸關係。 (保存指向tableA的指針並將其重新分配給tableB中的新對象) – Firo

+0

如何保存關係?我的意思是這個關係有指向舊對象的指針。不應該讀一個關係? –

+0

但你刪除了tableB的所有對象,對吧?然後,所有附加到tableB中的對象的關係都將被取消(如果這是您的刪除規則)。 tableA的班級名稱是什麼? – Firo

回答

0

該問題是由於對象插入到tableA時造成的。關係對象來自不同的上下文。雖然我已合併政策NSMergeByPropertyStoreTrumpMergePolicy仍然對象有無法解決的缺點。我更改了代碼,以便兩個對象都處於相同的上下文中。並解決了這個問題。

0

我覺得我在這裏誤解了你的意圖,但我會試一試並根據需要進行修改。首先,所有實體都應以大寫字母開頭,因此我將爲我的實體使用TableATableB。另外TableATableB是coredata實體的可怕名字。它們是非常通用的,如果你決定在你的表之外使用它們,它可能會讓你的代碼混淆。特別是因爲它是一個「過程非常複雜的巨大項目」。

這在本質上是什麼,我相信你正在尋找:

// defined elsewhere 
NSManagedObjectContext *managedObjectContext; 

// saving the the object that you want to connect to later 
TableA *relationshipToA = self.AllTableBs.tableARelationship; 

// remove all TableB objects from coredata as you are already doing 
// ... 
// // // 

// insert new TableB objects setting their tableARelationship to relationshipToA 
// ... 
// // 

// single example 
TableB *bObject = [NSEntityDescription insertNewObjectForEntityForName:@"TableB" inManagedObjectContext:managedObjectContext]; 
bObject.tableARelationship = relationshipToA; 

// save context 

然後,當您試圖訪問你的對象TableA的關係,它是有效的,反之亦然。

+0

感謝您的努力。我稍後再嘗試並報告。 (tableA和tableB只是爲了舉例;-)) –

+0

好的,我發現了關係中的錯誤。所以其表格A <--> tableB。但仍然不符合你的建議,也不符合我的工作方式。還有一件事是tableA與其他nsmanagedcontext和tableB一起被添加了B以及與其他上下文的新關係。它可以成爲永遠不可解決的錯誤嗎? –

+0

是的,這可能是問題,具體取決於。每個「NSManagedObjectContext」都有一個持久存儲。所以,如果你用'contextA'添加了'TableA',並且後來增加了與'contextB'的關係,那麼只有'contextB'會有這種關係,因爲'contextA'會有一個過時的持久存儲。嘗試重新分配和初始化'contextA'。 – Firo