私のiPhoneアプリで何か奇妙なことが起こっています。Core Data を使用して SQLite データベースにデータを保存しています。アプリの起動後初めて、テーブルを読み取ってすべての行を返し、ユーザーが選択できるもののリストを UITableView に入力しようとしました。リストの一番上の項目を選択すると、EXC_BAD_ACCESS 例外が発生します。彼らが他のアイテムを選択した場合、すべて問題ないようです。コード サンプルは次のとおりです。Sport と Team は NSManagedObjects です。sports は、NSFetchedResultsController (fetchedObjects) を使用してフェッチされた Sport オブジェクトの NSArray です。オブジェクトのリストを UITableView に表示できます (問題なく cellForRowAtIndexPath() 呼び出しに同じ配列を使用します)
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
Sport *sport = (Sport *)[sports objectAtIndex:indexPath.row];
if (teamSetup) {
if (team.sport != sport) {
[team setSport:sport]; <-- this is where the EXC_BAD_ACCESS happens
NSError *error;
[team.managedObjectContext save:&error];
}
[self.navigationController popViewControllerAnimated:YES];
} else {
// .. do some other stuff
}
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
更新: EXC_BAD_ACCESS エラーがスローされるまで、最初のレコードではなく、NSArray の最後のレコードにのみ影響するようです。アプリを再起動すると、問題はなくなり、コードは期待どおりに機能します:(