私は、コアデータを使用して非常に簡単な設定であると思っています:NSManagedObjectContext
と2つNSFetchedResultsController
です。アプリにはNSManagedObject
という独自のサブクラスがあります。私は何NSManagedObjectContextに変更が表示されない(「hasChanges」が常にfalse)
は、多かれ少なかれ、次の(擬似コード/フロー)である:私はドキュメントで読んだと思う何
1. create an NSFetchRequest
-> with it an NSFetchedResultsController
(and attach an NSFetchedResultsControllerDelegate)
2. fetch the objects from the store
3. create another NSFetchRequest (in/from/with the same context)
-> with it a second NSFetchedResultsController
4. fetch a subset of objects
5. change an object via
[[[secondFetchedResultsController fetchedObjects] objectAtIndex:0]
setWhateverSyncedProperty:differentValue]
6. save the NSManagedObjectContext (-> no error)
7. restart app -> changes lost
は、a)第一のFetchedResultsControllerのデリゲートがcontroller:didChangeObject:atIndexPath:forChangeType:newIndexPath:
イベントaとbを得るべきであるということです)NSManagedObjectContextは永続ストアに変更を保存しました。これの何も起こりません。
また、NSManagedObjectContext
は、保存の直前に変更を「参照」することを期待します。つまり、「hasChanges」を呼び出すとYES
を返します。それはしません。これはおそらく、永続的なストアに何も保存しない理由でもあります。変更がないと考えられます。
しかし、私は "NSLog"コンテキストの内容は私はがオブジェクトを変更したのを見て十分に奇妙です。
[[self managedObjectContext] refreshObject:[[[self fetchedResultsController] fetchedObjects] objectAtIndex:2] mergeChanges:YES];
を呼び出すときに、デリゲートがdidChangeObject
-messageを取得しますので、変更が...メモリに
なく、少なくとも最後です!
私は、これはNSManagedObjectContext Class ReferenceでhasChanges下の「キーと値の関連ノート」に関連している可能性がしかし、私は概念を完全に理解していないという気持ちを持って、私は推測します。
すべてのアイデアやヒントを高く評価します。
ところで、私はiPhoneシミュレータとXCode 3.2.5です。
私は同様の問題がありました。私は起動時に何らかのデータベースの初期化を行っていたことが判明しましたが、プロセスは私が思った順序で起こっていませんでした。この問題とは独立していると思われる挿入や削除が他にもある場合は、それを再評価することをお勧めします。 – Jim
うーん - 入力していただきありがとうございます。しかし、残念ながら、私はそれを他のデータ操作に取りやめませんでした。無駄にするには... – scherand
私はMagicalRecordを使用しています。保存と編集時に異なるNSManagedObjectContextオブジェクトを使用したため、同じ問題があります。確かに、 'NSManagedObjectContext'オブジェクトのオフセット(プリントアウト)を参照してください。 – VietHung