CoreData值意外更改

时间:2013-01-07 15:42:18

标签: objective-c core-data

当我不打算将核心数据值更改时,我遇到了问题。我知道如何解决它,但每次我这样做,我都会得到无法识别的选择器。我的想法是将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];
            }
        }
    }

3 个答案:

答案 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]