我想知道在多对多关系中获取相关实体数量的最佳方法是什么。假设我的数据模型看起来像这样(简化),我想知道每辆公共汽车的乘客数量:
目前我可以想到两个选择:
为名为 passengerCount 的公交实体添加额外属性,每次添加/删除乘客时都会更新。
每次需要显示乘客数量时,都会通过取走乘客并显示他们的计数来完成。
我的两个选项似乎效率都很低,即使我不知道用核心数据更新/获取值有多重。例如,假设为每个表视图单元格执行数字2。
我的问题是:最好的方法是什么? NSManagedObject类中的方法(我找不到)或其他更有效的方法?
答案 0 :(得分:5)
一开始有三个评论:
一个。遇到运行时问题时,您应该关心效率。 “过早优化是万恶之源。” (唐纳德克努特)
B中。谁说必须取得所有乘客实体?你想到这样的事情......
[bus.passengers count]
......导致乘客被抓住。但是核心数据支持错误,所以也许实体可能会陷入错误。 (只有一个id,但不是完整的对象。)
℃。当您打开详细模式时,您可以看到Core Data的功能。为此,请传递启动参数
-com.apple.CoreData.SQLDebug 1
问你自己的问题:
如果您确实遇到问题,可以使用-countForFetchRequest:error:
明确要求计数。
NSFetchRequest *fetch = [NSFetchRequest fetchRequestWithEntityName:@"passenger"];
fetch.predicate = [NSPredicate predicateWithFormat:@"bus == %@", bus];
…
NSUInteger count = [context countForFetchRequest:fetch error:NULL]; // Please pass an NSError instance in real world
输入Safari。
答案 1 :(得分:0)
核心数据实体bus
的XCode自动生成的NSManagedObject类包含与Passenger
个对象的多对多关系的属性。
您可以将此属性视为实体的“计算属性”(意味着您不会自己设置属性,但是当您添加或删除关系时,Core Data会自动更新它)。此属性是NSSet?
(引用相关的Passenger
对象),NSSet支持.count
方法。
因此,您可以在没有特殊提取请求的情况下使用.count
。