一些背景:
我正在尝试将大量数据存储在本地数据库中,并且我希望尽可能高效地执行此操作。
设想:
有许多实体是相互关联的,例如地址与这样的联系人相关联:
地址 <<-> 联系人
为了管理关系,我在 NSManagedObject 的每个子类中编写了一个方法,下面是一些代码片段:
// 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
}
}
需要考虑的点:
由于一个对象可以有多个关系,我知道在映射关系时内存消耗会增加。
问题:
一旦映射关系,我想将一个对象恢复为故障,而不会丢失所做的任何更改。
从苹果文档和一些谷歌搜索我开始知道我可以使用refreshObject:mergeChanges:方法。所以我打算在 manageRelationships 方法的代码块末尾添加以下行:
[[self managedObjectContext] refreshObject:self mergeChanges:YES];
我有点困惑,想知道——
这是否意味着对对象所做的任何更改都将存储在持久存储中,然后对象将出现故障?如果是,那么我可以认为它相当于 NSManagedObjectContext 的保存方法吗
请建议。