一些背景資料:需要對refreshObject一些澄清:mergeChanges:YES
我試圖存儲大量本地DB數據的,我想盡可能高效地做到這一點。
場景:
有許多實體它們是相互關聯的,如地址與像這樣的聯繫人相關聯:
地址< < - >接觸
爲了管理關係,我在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
請建議。
得到相同的問題!你有沒有發現這種情況下的解決方案? – Bucket 2018-01-18 08:04:01