私はMagicalRecordを初めて使用するので、これは簡単なことかもしれませんが、どこでも答えを探しましたが、誰も私の問題を抱えているようには見えません. 私は単純な Core Data 構造を持っており、1 つの親が一方の関係の子を持つ多くの子オブジェクトにつながり、もう一方の親が親になっています。
期待どおり、これは機能します...
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];
1 つの親に属するすべての子のテーブルビューを生成しますが、これも正常に機能します。行をクリックすると、選択した子の詳細を表示するコントローラーが表示されます。このコントローラーには、テーブルから渡された 2 つのプロパティがあります。テーブルが属する親と、クリックされた子です。
次に、詳細に加えられた変更の保存ボタンがあります。それは以下を引き起こします:
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 でリレーションシップを設定する方法を誤解していると思いますが、試してみることが不足しています....
編集: これはコア データのセットアップです。上で簡略化しようとしましたが、基本的に患者は親、チェックは子です (患者 = 親、チェック = 子)。
また、アプリデリゲートでは、経由で初期化されます
[MagicalRecord setupCoreDataStack];
また、詳細ビューで self.child または self.parent を NSLog にすると、どちらも正しいオブジェクトのように見えます。