루프

1

에 대한에 NSMutableDictionary에있는 NSDictionary 변환 나는 다음과 같은 코드가 있습니다루프

arrayNSDictionary 개체 가득하면 내 질문은,이 루프 코드를 자동으로 작성됩니다대로
for (NSMutableDictionary *aDict in array) 
{ 
    // do stuff 
    [aDict setObject:myTitle forKey:@"title"]; 
} 

로 변환을 NSMutableDictionary 개체가 있습니까?

또는 루프에서 setObject:forKey:unrecognized selector sent to instance 오류가 발생하지 않도록 여기에서 좀 더 구체적으로해야합니까?

+0

아니요. NSDictionary 포인터와 NSMutableDictionary 포인터를 단순히 지정/캐스팅하면 개체 유형이 변경되지 않습니다. 새로운 객체를 생성하려면'mutableCopy' 또는 다른 옵션 중 하나를 사용해야합니다. –

+0

아마도 JSON 응답을 구문 분석하려고합니까? 그렇다면 변경할 수없는 객체를 변경 가능한 객체로 다시 가져 오는 편리한 방법이 있습니다. – Aaron

+0

아니요, JSON 용이 아닙니다. 죄송합니다. –

답변

4

현재 언급 한 오류가 발생합니다. 루프가 변경 가능한 사전으로 설정되어 있지만 기본 객체는 여전히 변경할 수 없습니다. 당신은 그것에서 새로운 사전을 만들어야 할 것입니다. 시도해보십시오.

NSMutableArray *newArray = [NSMutableArray array]; 
for (NSDictionary *aDict in array) 
{ 
    NSMutableDictionary *mutable = [aDict mutableCopy]; 
    // do stuff 
    [mutable setObject:myTitle forKey:@"title"]; 
    [newArray addObject:mutable]; 
} 
+0

코드 예제를 보내 주셔서 감사합니다! 배열에'NSMutableDictionary' 나'NSDictionary'가 있는지 확실하지 않으면 어떻게합니까? 나는 알아야한다. 그러나 내가하지 않으면 점검 할 길이 있는가? 아니면이 예제 코드로 보여줄 것인가? –

+2

'[aDict isKindOfClass : [NSMutableDictionary class]]'를 수행하거나'[aDict respondsTo : @selector (setObject : forKey :)]와 같은 변경 가능한 메소드에 응답 하는지를 체크함으로써 언제나 간단한 점검을 할 수 있습니다. – PaReeOhNos

0

아니요 자동으로 변환하지 않습니다. 너 스스로 그렇게해야 해. 인식 할 수없는 셀렉터가 인스턴스 예외로 보내지게 될 것입니다.