我是 MagicalRecord 的新手,所以这可能是一件简单的事情,但我到处寻找答案,似乎没有人遇到我的问题。我有一个简单的核心数据结构,其中一个 Parent 导致多个 Child 对象,其中一个方式是子关系,另一个是父级。
正如预期的那样,这有效......
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];
我生成了属于一个父母的所有孩子的表格视图,这又可以正常工作。单击一行会将您带到一个控制器,该控制器显示所选孩子的详细信息。这个控制器有两个从表传递给它的属性:表所属的父级和被单击的子级。
然后,我有一个保存按钮,用于对细节所做的任何更改。它触发以下内容:
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(患者 = parent,checks = children)。
此外,在应用程序委托中,它是通过
[MagicalRecord setupCoreDataStack];
此外,如果我在详细视图中使用 NSLog self.child 或 self.parent,两者看起来都像是正确的对象。