2013-01-07 6 views
0

핵심 데이터 값이 의도하지 않은 경우 변경되는 문제가 있습니다. 나는 그것을 고칠 수있는 방법에 대한 아이디어를 가지고 있지만, 할 때마다 나는 인식 할 수없는 선택자를 얻는다. 내 생각은 valueArray = attribute.values;valueArray = [NSArray arrayWithArray:attribute.values];으로 변경하는 것입니다. 도움을 주시면 감사하겠습니다.CoreData 값이 실수로 변경됨

편집 : attribute.values의 합계를 만들려고합니다. 스킬 노드가 있고 각 노드에 속성이 첨부되어 있으며 때때로 그 속성 값이 다릅니다. 나는 모든 같은 가치들을 요약하려고 노력하고있다. 대신, 왜 당신은 단순히 사전에 attributes.values를 추가하지 마십시오 사전에 그것을 추가하기 전에있는 NSArray에 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

인식 할 수없는 선택자 오류 란 무엇입니까? – propstm

+0

해제 된 개체에 메시지를 보냅니다. 지정된 메모리에서 오브젝트를 찾을 수 없습니다. – stormbard

답변

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] 
+0

데이터 구조는 다음과 같습니다. {1, 2, 4}. 추가되는 배열은 {3, 5, 6}이며, 함께 추가하면 원하는 방식으로 {4, 7, 10}이됩니다. 나는 반복과 동시에 왜곡하는 것이 위험한 이유를 이해하지만, 데이터가 항상 이런 방식으로 포맷된다는 것을 알기 때문에 느슨한 의미에서 'ok'라고 느꼈다. – stormbard

+0

더 좋은 방법과 안전한 방법이 있다면 알려 주시기 바랍니다. – stormbard

+0

귀하의 의견에 응답하여 내 답변 편집 –

0

?

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

희망이 도움이 : 해당

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

변경 :

여기에 내가 무슨 말입니다.

+0

이전과 같은 결과로, 저장된 값은 계속 변경됩니다. – stormbard

+0

아! 나는 지금 진행되고있는 것을 보았습니다 ... 당신은 매번 다른 값으로 그 사전에 같은 키를 다시 쓰고 있습니다. 정확히 무엇을하려는 거니? 사전에 이미 존재하는 것에'attribute.values'을 추가 하시겠습니까? –

+0

attribute.values의 합계를 작성하려고합니다. 스킬 노드가 있고 각 노드에 속성이 첨부되어 있으며 때때로 그 속성 값이 다릅니다. 나는 모든 같은 가치들을 요약하려고 노력하고있다. – stormbard

0

attribute.values의 mutableCopy를 만들고이를 사전에 저장하여 해결했습니다.

관련 문제