Cocoa touch 需要对refreshObject:mergeChanges:YES进行一些澄清

Cocoa touch 需要对refreshObject:mergeChanges:YES进行一些澄清,cocoa-touch,core-data,Cocoa Touch,Core Data,一些背景: 我试图在本地数据库中存储大量数据,我希望尽可能高效地存储 场景: 存在许多相互关联的实体,例如地址与如下联系人关联: 首先,你不需要自己管理人际关系。让CoreData来处理这个问题 当您访问故障中的数据时,Core Data会自动解决(触发)故障。这种懒散的加载 对于内存使用来说,相关对象要好得多,对于获取与很少使用的对象相关的对象来说,速度要快得多 (或非常大的)物体。 您可以通过简单地实例化联系人地址之间的一对多关系来实现这一点 关于刷新对象:合并更改:你错了。它与save:

一些背景:

我试图在本地数据库中存储大量数据,我希望尽可能高效地存储

场景:

存在许多相互关联的实体,例如地址与如下联系人关联:


首先,你不需要自己管理人际关系。让CoreData来处理这个问题

当您访问故障中的数据时,Core Data会自动解决(触发)故障。这种懒散的加载 对于内存使用来说,相关对象要好得多,对于获取与很少使用的对象相关的对象来说,速度要快得多 (或非常大的)物体。

您可以通过简单地实例化联系人地址之间的一对多关系来实现这一点

关于刷新对象:合并更改:你错了。它与save:method不同。如果将“合并更改”设置为“是”,则仅表示:

如果标志为“是”,则从存储或上次缓存状态的值重新加载对象的属性值,然后(在本地上下文中)所做的任何更改都将重新应用于这些(现在是新更新的)值。


因此,如果您在托管对象A中进行了一些更改,然后执行了[上下文刷新对象:A合并更改:是],则对象A仍将保持未保存状态

你好,马克。。thnx澄清:-)得到同样的问题!您是否找到了此方案的解决方案?
// class Contact
- (void)manageRelationships
{
    @autoreleasepool {
        LocalDBManager *localDBManager = [[LocalDBManager alloc] init];

        // managing relationships

        // map associated addresses

        NSPredicate *addressIdPredicate = [NSPredicate predicateWithFormat:@"%K == %@",ADDRESSID,self.addressid];

        // below method returns an object as fault by firing a fetch request against context
         NSSet *retrievedAddresses = [localDBManager retrieveManagedObjectsForEntity:ADDR_ENTITY withPredicate:addressIdPredicate asFault:YES withPropertyValues:NO error:nil];
        self.addresses = retrievedAddresses;


        // managing few more relationships         
    }

}
[[self managedObjectContext] refreshObject:self mergeChanges:YES];