そのため、コアデータとiCloudを組み合わせたデータベースを使用していますが、これはうまく機能しています。
ただし、一部のユーザーは、UITableView で表現されている NSManagedObject を削除しようとした後に、特定のクラッシュが発生しました。クラッシュ レポートに添付するデバッグ ログには、クラッシュ前の次のエラー ログがあります。
2013-05-08 22:38:51.851 MyApp[11819:907] Unresolved error Error Domain=NSCocoaErrorDomain Code=134030 "The operation couldn’t be completed. (Cocoa error 134030.)", {
}
残念ながら、エラーに関する情報: {} は空であり、自分でエラーを経験したことがないため、エラーを再現する方法がわかりません。ただし、顧客には少なくとも 21 回発生しました。(さらに悪いことに、アプリを再度開くと、一部の NSManagedObject が無効な状態になり、テーブルビューの読み込みに問題があります。しかし、それは脇にあります)
実際のエラーは「tableView:commitEditingStyle:forRowAtIndexPath:」の「SIGABRT」です。それぞれのコードは次のとおりです。
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
if (editingStyle == UITableViewCellEditingStyleDelete) {
ICLog(@"Deleting the row %i,%i from the data source", indexPath.row, indexPath.section);
NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext];
[context deleteObject:[self.fetchedResultsController objectAtIndexPath:indexPath]];
//Save the context
NSError *error;
if (![context save:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
}
}
}
PS:ログから、これがすべてメインスレッドから実行されていることも明らかです。
ここにもこの問題を抱えた人はいますか?
更新:
幸いなことに、私が今取り組んでいる別のアプリでも同じエラーが発生しましたが、アクセスできるデバイスでも同じエラーが発生しました (これまでのところ、どのデバイスでもこれが発生したことはありませんでした)。これは私が見つけたものです:
a) 設定で icloud をオフにした後も発生する
b) NSManagedObject を削除または挿入しようとするたびにエラーが発生する
そのため、データベースの更新が完全に停止しているようです。上記の例外をキャッチできれば、アプリは少なくともクラッシュしません。もちろん、データベースへの変更は保存されません。