【发布时间】:2013-02-14 05:43:49
【问题描述】:
一些背景:
我正在尝试将大量数据存储在本地数据库中,并且我希望尽可能高效地做到这一点。
场景:
有许多实体是相互关联的,例如地址与这样的联系人相关联:
地址联系方式
为了管理关系,我在 NSManagedObject 的每个子类中都写了一个方法,下面是一些代码 sn-p:
// 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
请提出建议。
【问题讨论】:
-
遇到同样的问题!你有没有为这种情况找到任何解决方案?
标签: cocoa-touch core-data