3

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

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

4

2 回答 2

9

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

请参阅NSManagedObject 类参考 refreshObject:mergeChanges:

于 2013-12-15T04:52:36.417 回答
0

此链接可能会对您有所帮助,它添加了一个用于恢复对 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];
    }
}
于 2013-02-01T01:52:43.020 回答