NSManagedObjectContext看不到更改(“hasChanges”始终为false)

时间:2012-01-11 21:32:57

标签: iphone core-data

我认为使用核心数据的设置非常简单:一个NSManagedObjectContext和两个NSFetchedResultsController。该应用程序有自己的子类NSManagedObject

我所做的或多或少是以下(伪代码/流程):

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:事件,并且b)NSManagedObjectContext将更改保存到持久存储中。什么都不会发生。

我还希望NSManagedObjectContext在保存之前“看到”更改,即当我在其上调用“hasChanges”时返回YES。它不是。这可能也是没有将任何东西保存到持久存储的原因:它认为没有任何变化。

奇怪的是,当我“NSLog”上下文的内容时,我看到已更改对象。所以变化在记忆中......

最后但并非最不重要:致电

[[self managedObjectContext] refreshObject:[[[self fetchedResultsController] fetchedObjects] objectAtIndex:2] mergeChanges:YES];

委托获取didChangeObject - 消息!

我觉得这可能与NSManagedObjectContext Class Reference hasChanges 下的“Key-Value相关注释”有关,但我猜不出这个概念。 / p>

非常感谢任何想法和/或提示。

顺便说一句:我在iPhone模拟器和XCode 3.2.5上。

2 个答案:

答案 0 :(得分:1)

确保您对NSManagedObjectContext有强烈的引用。听起来你正在失去上下文,托管对象失去了它们的上下文。这可以解释没有得到保存的变化。

答案 1 :(得分:1)

之前发生在我身上。确保您的属性为@dynamic而不是@synthesize