NSSet 和重复项,我需要重复项吗?
Posted
技术标签:
【中文标题】NSSet 和重复项,我需要重复项吗?【英文标题】:NSSet and duplicates, I need the duplicates? 【发布时间】:2014-11-11 08:51:07 【问题描述】:我有一个核心数据项目,其中有几个具有关系的实体。我正在使用 NSSet 提取数据,但发现 NSSet 删除了重复项 - 至少这是我的程序中发生的情况。
我在模型中创建了实体和属性,然后创建了关联的 NSManagedObjects,以便我可以编写自定义方法。我有一个连接到实体的ArrayController
和一个连接到arrayController
的表。第 0 列显示订单,第 1 列显示该订单的总计 - 订单与商品具有一对多关系。
因此,第 2 列绑定设置为 arrayController
,modelKeyPath 设置为 returnBalance
方法。
我在 NSManagedObject 中有以下方法。
-(NSString *)returnBalance
NSSet *setTotal = [self valueForKeyPath:@"item.cost"];
NSArray *array = [setTotal allObjects];
double ttl = 0.0;
for (NSNumber *d in array)
ttl = ttl + [d doubleValue];
NSNumber *total = [NSNumber numberWithDouble:ttl];
return [total stringValue];
除了 NSSet 删除重复项外,一切正常。我已经搜索并没有找到从关系数据中提取信息的另一种方法。有什么想法吗?
[编辑]---------------
至于 Schema,我有 3 个实体(作业、订单和项目)。具有来自 Job -> Order -> Item 的一对多关系。一份工作有很多订单,每个订单有很多项目。项目由name
和cost
组成。
我在窗口中有一个 2 列 NSTableView
,列出了第 0 列中的订单,并希望在第 1 列中显示该订单的总计。所以一目了然,我可以看到所有订单和每个订单的总数。如果您点击一个订单,会有第二个NSTableView
显示该订单的所有商品。
从功能上讲,一切都“正常工作”...仅使用 NSSet 并不能提供所有数据(即重复数据)。
Order
实体有一个关联的 NSManagedObject,这是我放置 -(NSString *) returnBalance
方法的地方。
--[更多]-- 我尝试了更多方法,并且所有接缝都删除了重复项 - 发生了什么?
NSArray *array = [NSArray arrayWithObjects:[self valueForKeyPath:@"item.cost"], nil];
NSString *costString = [self valueForKeyPath:@"item.cost"];
总是一样,不是所有的数据都在那里。然而,在窗口中,第二个NSTableView
显示了所有数据——所以它就在那里。
【问题讨论】:
是的,这就是NSSet
的定义。如果您解释您的架构以及您实际想要完成的工作,也许您会得到更好的帮助。
【参考方案1】:
您不需要方法。订单总成本的关键路径是item.cost.@sum
。
【讨论】:
感谢您的回复。我已经尝试过了,我收到一个错误。item.cost.@sum
产生一个...is not supported. key path: cost.@sum
。使用@sum.item.cost
会产生类似的错误...is not supported. Key path: cost
。我把所有东西都绑定了,所以不知道为什么,这可能是一个不同的问题。我想使用一种方法,以便在需要时可以更灵活地操作数据。如果不使用fetchRequest
,就没有办法将ALL数据从实体拉到数组吗?
你不能有重复的项目,所有的数据都在集合中。 cost 是字符串还是数字?
成本是一个数字。我目前的解决方案是使用 NSFetch,但想看看是否有更好的方法。以上是关于NSSet 和重复项,我需要重复项吗?的主要内容,如果未能解决你的问题,请参考以下文章
NSSet 在使用 SetWithArray 时如何比较数组中的值以删除重复项
NSCountedSet 在 UITableView 中重复和计数