iPhone開発者にとってはかなり新しい。私のアプリはコアデータを使用しており、ある時点でNSFetchedResultsControllerDelegateメソッド中にいくつかのデータを保存しようとしています。
- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject
atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type
newIndexPath:(NSIndexPath *)newIndexPath {
私はこの主題に関するAppleのドキュメンテーションからこれのほとんどを正しく得ています。削除アクションは次のようになります。
case NSFetchedResultsChangeDelete:
[managedObjectContext deleteObject:anObject];
NSError *error;
if (![managedObjectContext save:&error]) {
NSLog(@"WTF? %@", [error description]);
}
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
withRowAnimation:UITableViewRowAnimationFade];
break;
さて、これを行うと、必然的なクラッシュの後に問題のオブジェクトが削除されます。だから何か正しいことが起こっています。ただし、クラッシュは興味深いものです。
重大なアプリケーションエラー。Core Data変更処理中に例外がキャッチされました:保存前に保留中の変更を処理できませんでした。100回試行しても、コンテキストはまだダーティです。通常、この再帰的なダーティは、不適切な検証メソッド、-willSave、または通知ハンドラーが原因で発生します。userInfo(null)を使用
2010-02-09 23:02:03.931 app2 [26664:207]***キャッチされなかった例外'NSInternalInconsistencyException'が原因でアプリを終了しています。理由:'保存前に保留中の変更を処理できませんでした。100回試行しても、コンテキストはまだダーティです。通常、この再帰的なダーティは、不適切な検証メソッド、-willSave、または通知ハンドラーによって引き起こされます。
私の研究では、非常に限られた結果しか得られていません。これを文書化するためにここにあるのは良いことですよね?:-)しかし、私の腸は、MOCが私のコントローラーの他の場所に書き込まれていると言っていますが、それが起こっているという証拠は見つかりません。viewDidLoadメソッドでは、初期データの取得にNSFetchedResultsControllerが使用されていますが、それだけです。
ここで何が間違っている可能性があるかについての提案はありますか?いつものように、あなたのコミュニティベースの集合精神は非常に高く評価されています!
乾杯、アーロン