当我不打算将核心数据值更改时,我遇到了问题。我知道如何解决它,但每次我这样做,我都会得到无法识别的选择器。我的想法是将valueArray = attribute.values;
更改为valueArray = [NSArray arrayWithArray:attribute.values];
我们将不胜感激。
编辑:我正在尝试创建attribute.values的总和。我有技能节点,每个节点都附加了属性,有时这些属性值也不同。我试图总结所有类似的价值观。
Build *selectedBuild = [buildListController selectedObjects][0];
NSMutableDictionary *attributeAggregator = nil;
attributeAggregator = [NSMutableDictionary dictionary];
NSLog(@"Before: %@", attributeAggregator);
NSMutableDictionary *numValues = [NSMutableDictionary dictionary];
NSArray *valueArray = nil;
for (SkillNode *active in selectedBuild.activeNodes) {
for (Attribute *attribute in active.attributes) {
NSString *attrName = attribute.name;
NSLog(@"%@ %@", attribute.name, attribute.values);
NSMutableArray *obj = [attributeAggregator objectForKey:attribute.name];
if (obj) {
for (int ndx = 0; ndx < [obj count]; ndx++) {
obj[ndx] = [NSNumber numberWithFloat:([obj[ndx] integerValue] + [attribute.values[ndx] integerValue])];
}
[attributeAggregator setValue:obj forKey:attrName];
} else {
valueArray = attribute.values;
[attributeAggregator setValue:valueArray forKey:attrName];
[numValues setValue:attribute.numValues forKey:attrName];
}
}
}
答案 0 :(得分:0)
在将属性值添加到字典之前,不是将属性值放入NSArray中,为什么不简单地将attributes.values添加到字典中?
这就是我所说的:
...
valueArray = attribute.values;
[attributeAggregator setValue:valueArray forKey:attrName];
...
将其更改为:
...
[attributeAggregator setValue:attribute.values forKey:attrName];
...
希望这有帮助。
答案 1 :(得分:0)
我通过创建attribute.values的mutableCopy并将其存储在字典中来解决它。
答案 2 :(得分:0)
这段代码很吓人。
if (obj) {
for (int ndx = 0; ndx < [obj count]; ndx++) {
obj[ndx] = [NSNumber numberWithFloat:([obj[ndx] integerValue] + [attribute.values[ndx] integerValue])];
}
[attributeAggregator setValue:obj forKey:attrName];
你正在迭代obj
并同时改变它,这很危险并且不赞成。这就是为什么当你这样做时,循环的快速枚举甚至都不能编译。
使用KVC Collection Operators检查您的总和,我不清楚您的数据结构是如何向您展示的,但请查看文档,特别是@sum
RE:评论
好的,我当然不清楚你究竟在做什么。收集运营商不会在这里帮助你。但是,当你迭代它时,我仍然不会改变数组。我可能只是将两个数组添加到一个新数组中,然后在结束时将结果数组设置在您想要的位置。使用第三个结果数组求和两个数组的示例...
NSArray *foo = @[@1, @2, @3];
NSArray *bar = @[@4, @5, @6];
NSMutableArray *result = [NSMutableArray arrayWithCapacity:[foo count]];
[foo enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
result[idx] = [NSNumber numberWithInt:[obj integerValue] + [bar[idx] integerValue]];
}];
// result == @[@5, @7, @9]