0

Core Data (「アイテム」) に単一のエンティティを持つ Xcode プロジェクトがあり、各アイテムが他の多くのアイテムと関係を持つことができるように再帰関係を設定しました。ドキュメントに従って関係を設定しました(2つの関係、またはそれ自体の逆の関係のいずれかが合法であり、後者を使用しています)との関係を持つアイテムを削除するまで、すべてがうまく機能します別のアイテム。リレーションシップに「カスケード」削除ルールを選択すると、クラッシュは発生せず、すべての機能が期待どおりに動作します。ただし、本当に使用したい「無効化」削除ルールを使用すると、クラッシュが発生します。

再帰関係を使用していても、アイテムを削除すると、コア データが通過し、すべての関係の反対側にあるそのアイテムへのすべての参照が null に設定されると想定しています。それとも、手を差し伸べて手動で行う必要がありますか? しなくていいと思っています。

それとも、FetchedResultsController の「操作の順序」の問題でしょうか?

私はこれについて完全にアイデアがありません。過去数週間にわたる Apple の問題のため、私は彼らからサポートを受けることができませんでした。

コードはたくさんあり、そのほとんどはテンプレート/定型コードなので、私が構築しているこの単純なテスト例のコードを投稿していません。

4

1 に答える 1

0

アップデート:

さらにテストとロギングを行った結果、Core Data と削除ルールは問題ではなくなりました。「無効化」は、オブジェクトが削除された後、オブジェクトが持つ可能性のある関係を使用して、本来あるべきように正確に機能します。問題は、フェッチされた結果コントローラーにあります。

解放されていないそのオブジェクトへの参照がどこかにある必要があります。リレーションシップが作成されたとき以外。関係がない場合、オブジェクトは常に問題なく削除されるため、関係と関係があります。

例外ブレークポイントがオンの場合、特定のインデックス パスで fetchedResultsController のオブジェクトにアクセスしようとすると、configureCell: で中断します。

NSManagedObject *object = [self.fetchedResultsController objectAtIndexPath:indexPath];

例外ブレークポイントがないと、次のエラーが発生します。

CoreData: エラー: 重大なアプリケーション エラーです。コア データの変更処理中に例外がキャッチされました。これは通常、NSManagedObjectContextObjectsDidChangeNotification のオブザーバー内のバグです。 * -[_PFBatchFaultingArray objectAtIndex:]: userInfo (null) を使用した境界 (3) を超えたインデックス (3)

configureCell のすべてのコードをコメントアウトすると、セルは正しく表示されませんが、クラッシュすることはありません。すべてが完璧に機能します。

はぁ。

于 2013-08-09T04:45:55.103 に答える