2014-11-07 3 views
0

중첩 된 구조 내에서 개체를 업데이트하는 데 문제가 있습니다. 나는 여러 nsmutableDictionaries를 포함하고 다른 경우에는 이전 수준에 그 각각에 대해 nsmutableDictionaries의 추가 수준이있는중첩 된 NSMutableDictionary 업데이트 문제 - 잘못된 키 업데이트

NSMutableDictionary 

있습니다.

다음은 변경할 수있는 유형이므로 setObject : ForKey :로 간단히 가정합니다. 어떤 이유로 구조체가 중첩 된 경우 하나의 내부 수준 사전을 업데이트하려고 시도하면이 수준의 모든 사전 형 사전에 대한 모든 개체 값이 무시됩니다.

값을 구문 분석하고 키를 다시 제거하려고 시도했지만 여러 가지를 시도했지만 아무 것도 작동하지 않는 것 같습니다.

도움을 주시면 감사하겠습니다.

여기 내 코드입니다 : 데모를위한 몇 가지 인덱스가있는 텍스트 필드와 segmentedControl 설정이 있고 둘 중 선택되어있는 것은 개체를 저장/업데이트하는 데 사용하는 인덱스입니다. 키에 NSNumber를 사용하고 있습니다.

업데이트 :

//viewDidLoad 

self.content = [NSMutableDictionary new]; 
self.contentContainer = [NSMutableDictionary new]; 


- (IBAction)like_unlike:(id)sender { 
    BOOL isLiked = [self.textField.text boolValue]; 

    NSLog(@"isLiked - %d", isLiked ? YES : NO); 

    NSNumber *nsIsLiked = [NSNumber numberWithBool:isLiked]; 

    NSLog(@"nsIsLiked - %@", nsIsLiked); 


    [self.content setObject:nsIsLiked forKey:@"updatedIsLiked"]; 


    [self.contentContainer setObject:self.content forKey:[NSNumber numberWithInteger:self.segment.selectedSegmentIndex]]; 

} 

NSLog(@"COMPLETE DIC - %@", self.contentContainer); 

}

이 출력입니다. 나는 3 개의 값을 저장한다. 그런 다음 false로 인덱스 0을 업데이트시 인덱스 0, 2, 4

2014-11-08 11:45:41.855 DictionariesNested[1039:125297] isLiked - 1 
2014-11-08 11:45:41.855 DictionariesNested[1039:125297] nsIsLiked - 1 
2014-11-08 11:45:41.855 DictionariesNested[1039:125297] COMPLETE DIC - { 
0 =  { 
    updatedIsLiked = 1; 
}; 
} 
2014-11-08 11:45:43.623 DictionariesNested[1039:125297] isLiked - 1 
2014-11-08 11:45:43.623 DictionariesNested[1039:125297] nsIsLiked - 1 
2014-11-08 11:45:43.623 DictionariesNested[1039:125297] COMPLETE DIC - { 
0 =  { 
    updatedIsLiked = 1; 
}; 
2 =  { 
    updatedIsLiked = 1; 
}; 
} 
2014-11-08 11:45:45.018 DictionariesNested[1039:125297] isLiked - 1 
2014-11-08 11:45:45.018 DictionariesNested[1039:125297] nsIsLiked - 1 
2014-11-08 11:45:45.018 DictionariesNested[1039:125297] COMPLETE DIC - { 
0 =  { 
    updatedIsLiked = 1; 
}; 
4 =  { 
    updatedIsLiked = 1; 
}; 
2 =  { 
    updatedIsLiked = 1; 
}; 
} 

은, 모든 값은 0

2014-11-08 11:48:01.161 DictionariesNested[1188:161731] isLiked - 0 
2014-11-08 11:48:01.161 DictionariesNested[1188:161731] nsIsLiked - 0 
2014-11-08 11:48:01.162 DictionariesNested[1188:161731] COMPLETE DIC - { 
0 =  { 
    updatedIsLiked = 0; 
}; 
4 =  { 
    updatedIsLiked = 0; 
}; 
2 =  { 
    updatedIsLiked = 0; 
}; 
} 
+0

누구든지 의견이 있으십니까? – SprayKid982

답변

0

편집으로 변경됩니다 : 당신이 당신의 질문을 업데이트하기 때문에 나는 내 대답을 다시

self.contentContainer setObject:을 수행 할 때 선택한 사전에 대해 특정 사전이 아닌 동일한 사전을 저장할 때마다 저장됩니다. 따라서 하나를 변경하면 동일한 인스턴스이므로 모두 변경됩니다. 각 세그먼트에 대해 하나의 사전을 가지려면 새 세그먼트가없는 경우 인스턴스를 만들어야합니다.

문제를 해결하려면 각 세그먼트에 대해 NSMutableDictionary을 인스턴스화해야합니다. 그런 식으로 작동해야합니다 :

NSMutableDictionary *content = [self.contentContainer objectForKey:self.segment.selectedSegmentIndex]; 
if (!content) { 
    content = [[NSMutableDictionary alloc] init]; 
    [content setObject:nsIsLiked forKey:@"updatedIsLiked"]; 
} 
[self.contentContainer setObject:content forKey:[NSNumber numberWithInteger:self.segment.selectedSegmentIndex]]; 
+0

답장을 보내 주셔서 감사합니다. 내 코드로 업데이트했습니다. – SprayKid982

+0

내가 잘 작동하지 않아야합니까? ... – SprayKid982

+0

방금 ​​내 대답을 업데이트했습니다! – tbaranes

관련 문제