0

私はかなり快適な CoreData ユーザーです。私は絶対に私を殺していた問題を抱えていました. 誰でもこれを説明できますか?

さて、ほとんどの「読み取り専用」データ作業を行い、単純な書き込み操作を処理するメイン MOC があります。大規模な書き込み/インポート/その他を実行しようとしているときは、バックグラウンド MOC を新しいスレッドに割り当て、重い作業をすべて実行してから保存します。保存すると、NSManagedObjectContextWillSaveNotification が起動し、次に mergeChangesFromContextDidSaveNotification: が発生し、メイン MOC のすべてに変更が反映されます。かなり標準的。

そのため、数日前に NSManagedObject サブクラスの 1 つで変更が行われました。変更は、setValue:forKey: での呼び出しでした。そのメソッドで特別な処理が行われていない場合、最初は [super setValue: forKey:] を呼び出していました。[self setPrimitationValue: forKey:] に変更されて...

保存後、mergeChangesFromContextDidSaveNotification: が呼び出されますが、メイン MOC は変更を反映しません。だから、それは少し奇妙です。ただし、アプリケーションを閉じてから再度開くと、魔法のように変更が存在します。何!?!

変更を保存する永続ストアに問題があることはわかっていますが、他のMOCには問題がありません。その後、新しい MOC が作成されて新しいローンチになると、すべてが再びシンクになります。なんで?

このトピックに関するすべての光は、たくさんの助けになります。

4

1 に答える 1

1

setPrimitiveValue:forKey:すべての kvo 通知が発生するわけではありません。これがあなたの問題の原因だと思います。おそらくそれをラップして呼び出す必要がwillChangeValueForKey:ありdidChangeValueForKey:ます。

于 2010-09-03T18:58:55.863 に答える