我认为使用核心数据的设置非常简单:一个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上。
答案 0 :(得分:1)
确保您对NSManagedObjectContext
有强烈的引用。听起来你正在失去上下文,托管对象失去了它们的上下文。这可以解释没有得到保存的变化。
答案 1 :(得分:1)
之前发生在我身上。确保您的属性为@dynamic
而不是@synthesize