0

私は、1対多のギフトと受取人の関係を持つ単純なiphoneアプリケーションを持っています(つまり、1人の受取人は多くのギフトを受け取ることができますが、各ギフトは1人の受取人に送る必要があります。ギフトと受取人の関係を作成するために、私は作成しています最初に管理対象オブジェクトコンテキストで新しい受信者オブジェクトを作成し、新しいコントローラーの受信者オブジェクトを新しい受信者に設定してから、新しいコントローラーをnavigationControllerにポップします。新しいコントローラーが戻ったら、新しい受信者をギフトに割り当てます。

そのトランザクションのコード:

RecipientEditController *nextController = [
                                            [RecipientEditController alloc]
                                            initWithStyle:UITableViewStyleGrouped
                                          ];

Recipient *new = [NSEntityDescription 
                  insertNewObjectForEntityForName:@"Recipient" 
                  inManagedObjectContext:gift.managedObjectContext
                 ];
[new addGiftsObject:gift];

nextController.recipient = new;
nextController.recipient.hideRelationships = YES;

[self.navigationController pushViewController:nextController animated:YES];

if ([new hasData]) {
    gift.recipient = new;
} else {
    [gift.managedObjectContext deleteObject:new];
}

break;

新しいコントローラー内では、受信者オブジェクトは正常に動作しているようです。ViewWillAppearメソッド内で受信者の説明を印刷できます。しかし、tableView:cellForRowAtIndexPathメソッドに到達すると、受信者オブジェクトは無効になります。そのmanagedObjectContextPropertyはnilであり、recipient.firstName(モデルクラスとデータベースで定義されたプロパティ)を呼び出すと、エラーがスローされます。

エラー:

2011-11-30 17:22:18.111 Gift Hero[36359:b603] *** Terminating app due to uncaught exception 'NSObjectInaccessibleException', reason: 'CoreData could not fulfill a fault for '0x59e65c0 <x-coredata://97FDB78C-6F65-4B54-8DBB-00A9C6A4B4C8/Recipient/p21>''

何が起こっているのか分かりますか?これは文字通り私を狂わせています!ビューの表示とテーブルの表示の間に受信者が無効にするにはどうすればよいですか?!

よろしくお願いします、PT

4

1 に答える 1

0

わかりましたので、私はこれを理解したと思います。新しいviewControllerをプッシュしても、別の関数を呼び出すように、現在のメソッドの実行が終了するようには見えません。そのため、View Controllerを押した後にオブジェクトを削除すると、他のView Controllerのオブジェクトが削除されます。この背後にあるロジックはよくわかりませんが、それは何ですか...

于 2011-12-01T17:17:05.610 に答える