2012-01-11 37 views
1

私は、コアデータを使用して非常に簡単な設定であると思っています: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 ReferencehasChanges下の「キーと値の関連ノート」に関連している可能性がしかし、私は概念を完全に理解していないという気持ちを持って、私は推測します。

すべてのアイデアやヒントを高く評価します。

ところで、私はiPhoneシミュレータとXCode 3.2.5です。

+1

私は同様の問題がありました。私は起動時に何らかのデータベースの初期化を行っていたことが判明しましたが、プロセスは私が思った順序で起こっていませんでした。この問題とは独立していると思われる挿入や削除が他にもある場合は、それを再評価することをお勧めします。 – Jim

+0

うーん - 入力していただきありがとうございます。しかし、残念ながら、私はそれを他のデータ操作に取りやめませんでした。無駄にするには... – scherand

+0

私はMagicalRecordを使用しています。保存と編集時に異なるNSManagedObjectContextオブジェクトを使用したため、同じ問題があります。確かに、 'NSManagedObjectContext'オブジェクトのオフセット(プリントアウト)を参照してください。 – VietHung

答えて

1

NSManagedObjectContextを強く参照してください。あなたがコンテキストを失い、管理されたオブジェクトがコンテキストを失ったように思えます。それは救われない変化を説明するでしょう。

+0

あなたが何を意味するのか分かりませんか。コンテキストを「NSLog」して、変更されたオブジェクトを見ることができます...コンテキストがそこにあるようです。それは私が参照を持っていることを意味しないのですか?また、私は保持されたプロパティを介してコンテキストを取得します。 – scherand

+0

'NSManagedObjectContext'を静的またはivarに格納して保持している場合は、その参照を保持しています。あなたはよかったはずです。複数のコンテキストがあるかどうか確認してください。オブジェクトをあるコンテキストで変更し、別のコンテキストを保存しているとしますか? '-managedObjectContext'メソッドを使ってオブジェクトがどのコンテキストに入っているかを見ることができます。 –

2

これは以前私に起こったことです。あなたの特性がであることを確認してください。@synthesize

関連する問題