0

私は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 にすると、どちらも正しいオブジェクトのように見えます。

4

2 に答える 2

0

問題を扱いやすくしようとするときによくあることですが、投稿したコードとは関係ないように見えます。親テーブル ビューから親詳細ビューに移動し、次に子テーブル ビューに移動するとき、次の述語を使用して子のリストを取得しました

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

問題を引き起こしたのは ANY でした。

于 2013-05-10T19:03:41.293 に答える