0

当我不打算改变核心数据值时,我遇到了问题。我有一个关于如何修复它的想法,但每次我这样做时,我都会得到无法识别的选择器。我的想法是更改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];
            }
        }
    }
4

3 回答 3

0

与其在将 attribute.values 添加到字典之前将其放入 NSArray 中,不如简单地将 attributes.values 添加到字典中?

这就是我所说的:

...
valueArray = attribute.values;
[attributeAggregator setValue:valueArray forKey:attrName];
...

将其更改为:

...
[attributeAggregator setValue:attribute.values forKey:attrName];
...

希望这可以帮助。

于 2013-01-07T15:45:49.613 回答
0

我通过制作 attribute.values 的 mutableCopy 并将其存储在字典中来解决它。

于 2013-01-08T00:22:07.493 回答
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 集合运算符来得到你的总和,我不清楚你的数据结构是什么来告诉你如何,但是看看文档,特别是@sum

回复:评论

好的,我绝对不清楚你到底在做什么。收款操作员不会在这里为您提供帮助。但是,当你迭代它时,我仍然不会改变数组。我可能只是将这两个数组添加到一个新数组中,然后在完成后将结果数组设置在您想要的位置。使用第三个结果数组对两个数组求和的示例...

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]
于 2013-01-08T01:09:08.287 回答