2013-05-10 43 views
0

我是MagicalRecord的新手,所以這可能是一件簡單的事情,但我到處尋找答案,沒有人似乎有我的問題。 我有一個簡單的核心數據結構,其中一個父導致許多Child對象與關係的孩子單向,另一個父母。MagicalRecords:無法保存簡單的關係

正如所預期的這個作品......

Parent *parent = [Parent MR_createEntity]; 
parent.name = @"John"; 

Child *child1 = [Child MR_createEntity]; 
child.name = @"Paul"; 

parent.children = [NSSet setWithObject:child]; 
// or child.parent = parent; 

[[NSManagedObjectContext MR_contextForCurrentThread] MR_saveToPersistentStoreWithCompletion:nil]; 

我生成所有屬於一個家長爲孩子們的tableview,再次能正常工作。點擊一行可以進入一個顯示所選孩子詳情的控制器。該控制器具有兩個從表中傳遞給它的屬性:表所屬的父表以及被單擊的子表。

然後我有一個保存按鈕,用於對細節進行的任何更改。這觸發以下:

self.child.parent = self.parent; 
/* all the other details of the child */  
[[NSManagedObjectContext MR_contextForCurrentThread] MR_saveToPersistentStoreWithCompletion:nil]; 
[self.navigationController popViewControllerAnimated:YES]; 

,但我總是得到這個錯誤

CoreData: error: Serious application error. Exception was caught during Core Data change processing. This is usually a bug within an observer of NSManagedObjectContextObjectsDidChangeNotification. The left hand side for an ALL or ANY operator must be either an NSArray or an NSSet. with userInfo (null) 
2013-05-09 17:30:17.312 NoteMD[37109:c07] __70-[NSManagedObjectContext(MagicalSaves) MR_saveWithOptions:completion:]_block_invoke21(0x815f750) Unable to perform save: The left hand side for an ALL or ANY operator must be either an NSArray or an NSSet. 

我得到什麼我嘗試(如[self.parent addChildObject:self.child]同樣的錯誤或使用existingObjectWithID到獲取self.parent和self.child的本地版本)。

我猜我誤解了如何設置MagicalRecord關係,但我跑出來的東西,試圖....

編輯:這是核心數據的設置。我試圖在上面簡化它,但基本上Patient是Parent,Check是Child(患者=父母和檢查=孩子)。

Core data setup

此外,在應用程序委託它經由

[MagicalRecord setupCoreDataStack]; 

此外初始化,如果我的NSLog self.child,或在詳細視圖self.parent,無論看起來像正確的對象。

+0

請發佈您的coreData設置屏幕截圖 – 2013-05-10 01:05:24

+0

而不是將子設置爲父級,您可以嘗試將父級設置爲子級。映射一對一關係總是更容易。 – Anupdas 2013-05-10 06:19:56

+0

孩子對父母是一對一的。每個家長都有很多孩子通過孩子的關係。每個孩子都有一位家長。 – 2013-05-10 16:44:35

回答

0

正如試圖使問題易於管理時經常發生的那樣,它看起來像什麼也沒有使用我發佈的代碼。當從父表視圖到父細節視圖,然後移動子表視圖我用下面的謂詞來的孩子

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY parent.id like %@", self.parent.id]; 

名單這是這是造成這一問題的任何。

0

您很可能會保存錯誤的上下文。 ContextForCurrentThread:現在不推薦使用,因爲它並不總是返回正確的上下文。當你保存錯誤的上下文時,它可能看起來像你的保存不起作用。我建議通過使用inContext:參數來明確使用您在對象創建中使用的上下文,並使用mr_save方法保存該上下文

+0

MR_ ContextForCurrentThread未在代碼中列爲折舊(並且在整個庫中使用寬鬆)。我也嘗試過使用MR_defaultContext而沒有運氣。我回去了,每次我從我使用的數據庫(僞代碼)[MR_fetchAllGroupedBy ..... inContext:MR_defaultContext]中提取父代或子代,但仍然得到相同的錯誤。 – 2013-05-10 17:45:30