当更新版本已在内存中时,强制Core Data从先前存储的版本刷新NSManagedObject

时间:2013-02-01 01:14:40

标签: ios core-data

我无法强迫Core Data在我正在编写的基于文档的iOS应用程序中刷新一些NSManagedObject子类。

问题在于处理用户在当前文档中存在未保存的更改时加载第二个文档的情况 此时,如果用户再次加载第一个文档,则显示未保存的更改。 使用NSFetchRequest为文档的根对象加载文档。此提取请求的属性-setShouldRefreshRefetchedObjects:设置为YES和属性  -setIncludesPendingChanges:设置为NO我确定它们没有保存到持久性存储中,因为终止应用程序并重新启动它会导致原始未更改的文档显示出来。此外,我打开了SQL调试,它显示应用程序不是第二次从相关表中获取

2 个答案:

答案 0 :(得分:8)

我知道这个问题已经回答了,但是使用方法refreshObject:mergeChanges:NSManagedObjectContext?

请参阅NSManagedObject Class Reference refreshObject:mergeChanges:

答案 1 :(得分:0)

This link可能对您有所帮助,它为恢复NSManagedObject的更改添加了一个类别。祝你好运。

#import "NSManagedObject+RevertChanges.h"

@implementation NSManagedObject (NSManagedObject_RevertChanges)

- (void) revertChanges {
    // Revert to original Values
    NSDictionary *changedValues = [self changedValues];
    NSDictionary *committedValues = [self committedValuesForKeys:[changedValues allKeys]];
    NSEnumerator *enumerator;
    id key;
    enumerator = [changedValues keyEnumerator];

    while ((key = [enumerator nextObject])) {
        NSLog(@"Reverting field ""%@"" from ""%@"" to ""%@""", key, [changedValues objectForKey:key], [committedValues objectForKey:key]);
        [self setValue:[committedValues objectForKey:key] forKey:key];
    }
}