これが Magical Record のセーブ方法の問題なのか、それともどこかで単純なミスを犯しているだけなのかはわかりません。
NSFetchedResultController (FRC) と UITableView を使用してエンティティのリストを表示しています。ユーザーがエディタで新しいビュー コントローラを [追加] をタップすると、新しいエンティティが で作成され[MyEntity MR_createEntity]
ます。ユーザーは、関係を介してメイン エンティティに追加される追加のエンティティをここに追加できます。ユーザーがこのView Controllerで「保存」をタップすると、コンテキストが保存されます[[NSManagedObjectContext MR_contextForCurrentThread] MR_save]
NSFetchedResultsController は更新されているように見えますが、タップしてエンティティを編集すると、子エンティティはありません。デバッグは、エンティティが保存されていても、FRC には一時 ID を持つエンティティがまだあることを示しているようです。
[self.tableView reloadData]
FRCcontrollerDidChangeContent
デリゲートメソッドで素朴にやっています。
アプリケーションを再起動すると、正しいエンティティが読み込まれ、子エンティティがエディター ビュー コントローラーに正しく表示されます。
FRC は「メイン スレッド」の保存イベントに応答しているように見えますが、保存は実際にはバックグラウンド スレッドで行われているため、FRC はそれを認識していません。確認したところ、すべての「自分の」操作 (FRC の設定、エンティティの作成とフェッチ) はすべてメイン スレッド コンテキストで行われています。
MR_rootSavingContext で変更通知をリッスンし、それらをメイン スレッド コンテキストとマージしようとしましたが、これはうまくいきましたが、FRC で行が重複してしまいました (1 つは正しい「永続的な」エンティティで、もう 1 つは一時的なエンティティでした)。