ナビゲーション バーに 5 つの項目があり、それぞれが別のナビゲーション コントローラーに属しているプロジェクトで Core Data を使用しています。各アイテムは次の構造を持っています。
Item1NavController » Item1RootTableView > Item1RootDetailView
アプリケーションをしばらく使用した後 (ナビゲーション バーのアイテムの変更、詳細ビューの読み込みなど)、rootTableView が選択したオブジェクトをエラーとして返し、詳細ビューがクラッシュするという問題が発生しました。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
// Getting object in table view and load detail view
_contact = [[self fetchedResultsController] objectAtIndexPath:indexPath];
ContactDetailVC *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"ContactDetailVC"];
vc.contact = _contact;
[self.navigationController pushViewController:contactDetailVC animated:YES];
}
ログには次のメッセージが表示されます。
Selected contact: <Contact: 0x1f5e9d10> (entity: Contact; id: 0x1f5b38d0 <x-coredata://0F273F3F-708F-417F-915B-AE9EBB3133C0/Contact/p3828> ; data: <fault>)
// Error message
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[_NSObjectID_64_1 matchcode]: unrecognized selector sent to instance 0x213b4e20'
Core Data でのフォルトに関するドキュメントを読んだ後、この動作は一方では正常であるように見えます。しかし一方で、Core Data は、アクセスしているときにオブジェクトを自動的に再フェッチする必要がありますか?
アイデアをありがとう!
アップデート
ビューが表示されるたびに NSFetchedResultsController で再フェッチすると、問題は発生しません。
アップデートⅡ
@class Contact;
//...
@property (strong, nonatomic) Contact *contact;