我有实体城市。
我还有其他实体: BankBranches , NotaryBranches 等。这些实体是多对一与城市的关系实体。 城市实体与这些实体的关系也有一对多。
因此,如果我只获取City实体的城市名称,那么这些实体对象是否也被获取?我正在警告抓取性能,有时我想只获取城市名称,而不是触及所有其他相关对象。
答案 0 :(得分:1)
不,Core Data使用称为“faulting”的机制来减少使用的内存量。有关它的工作原理的描述:https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdFaultingUniquing.html
答案 1 :(得分:1)
如果您只搜索城市名称,我建议您使用NSFetchRequest实例的setPropertiesToFetch:方法提高搜索效率。您将指定一个表示名称的NSPropertyDescription。以下是它的工作原理:
NSFetchRequest *fetchRequest=[[NSFetchRequest alloc] init];
NSEntityDescription *entity=[NSEntityDescription entityForName:@"YourEntity" inManagedObjectContext:context];
[fetchRequest setEntity:entity];
[fetchRequest setResultType:NSDictionaryResultType];
NSDictionary *properties=[entity propertiesByName];
[fetchRequest setPropertiesToFetch:[NSArray arrayWithObject:[properties valueForKey:@"yourPropertyName"]]];
使用此获取请求,您将获取每个获取的对象的字典,并且您获得的唯一属性是您获取的属性。此方法的唯一缺点是您将无法在完全持久跟踪模式下使用NSFetchedResultsController。基本上,你没有从NSFetchedResultsController使用它获得跟踪模式。