Bazı arka plan: Ben yerel DB veri büyük miktarda depolamak için çalışıyorum ve mümkün olduğunca verimli yapmak istiyorumrefreshObject bazı açıklamalar Need EVET
.
Senaryo:
adres böyle bir kişiyle ilişkili olduğundan birbiriyle ilişkilidir birçok varlık vardır:
adresi < < -> kontak
İlişkileri yönetmek için, NSManagedObject öğesinin her bir alt sınıfında bir yöntem yazdım, aşağıdaki kod snippet'i aşağıdadır:
// 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
}
}
Nokta dikkate almak: bir nesne için birden ilişkiler olabilir
beri, ben haritalama ilişkileri olacak zaman bellek tüketimi artacaktır biliyoruz.
Soru:
Ben ilişkileri eşleştirilir kez herhangi bir değişiklik yapılmış kaybetmeden, arıza içine bir nesne geri çevirmek istiyoruz.
Apple belgelerinden ve bazı örneklerden, refreshObject: mergeChanges: yöntemini kullanabileceğimi öğrendim. Bu yüzden manageRelationships yönteminde kod bloğunun sonunda sınırının altında eklemeyi planlıyorum:
[[self managedObjectContext] refreshObject:self mergeChanges:YES];
karıştı biraz benim ve bilmesini istiyorum -
ne olursa olsun değişiklik yapılmadı anlamına mı Nesne kalıcı depoda saklanacak olacak ve sonra nesne bir hataya dönecek? evet, o zaman bunun eşdeğeri ait
NSManagedObjectContext
yöntemi kurtarmak için düşünün Eğer önerin.
! Bu senaryo için herhangi bir çözüm buldunuz mu? – Bucket