2010-05-24 2 views
7

[NSDictionary getObjects:andKeys:]의 작동 예제를 찾을 수 없습니다. 유일한 example 찾을 수 컴파일되지 않습니다. 누군가가 그들을 찾고있는 경우에 대비해 여기에 오류/경고를 제공했습니다.[NSDictionary getObjects : andKeys :]의 예

NSDictionary의 대부분의 메서드가 NSArray을 반환하기 때문에 내가 혼란스러워하는 이유가 있습니다. 그러나 documentation에는이 메서드의 out 변수가 C 배열로 반환된다는 내용이 나와 있습니다.

다음은 링크 된 예를 따르는 경우에 당신이 얻을 수있는 오류 메시지/경고입니다

NSDictionary *myDictionary = ...; 

id objects[]; // Error: Array size missing in 'objects' 
id keys[]; // Error: Array size missing in 'keys' 

[myDictionary getObjects:&objects andKeys:&keys]; 

for (int i = 0; i < count; i++) { 
    id obj = objects[i]; 
    id key = keys[i]; 
} 

.

NSDictionary *myDictionary = ...; 

NSInteger count = [myDictionary count]; 
id objects[count]; 
id keys[count]; 
[myDictionary getObjects:&objects andKeys:&keys]; // Warning: Passing argument 1 of 'getObjects:andKeys:' from incompatible pointer type. 

for (int i = 0; i < count; i++) { 
    id obj = objects[i]; 
    id key = keys[i]; 
} 

이 질문에 대한 답으로 실무적인 해결책을 제공 할 것입니다.

답변

12

여기서이 방법을 사용하는 올바른 방법 :

NSDictionary *myDictionary = [NSDictionary dictionaryWithObjectsAndKeys:@"1", @"A", @"2", @"B", nil]; 

NSInteger count = [myDictionary count]; 
id objects[count]; 
id keys[count]; 
[myDictionary getObjects:objects andKeys:keys]; 

for (int i = 0; i < count; i++) { 
    id obj = objects[i]; 
    id key = keys[i]; 
    NSLog(@"%@ -> %@", obj, key); 
} 
용액 (배열 정의에 추가 __unsafe_unretained)는 다음과 같이 수정되어야
+0

제가 방출해야 할 obj와 열쇠? – Cesar

+0

위의 코드 예제에서 아무 것도 해제하지 마십시오. –

+0

아무데도 왜 당신이 아무 것도 공개 할 필요가 없다는 것을 궁금해하시는 분들을 위해 (이것은 초기 개발에서 나를 죽인 것이 었습니다) 그것은 alloc'd가 없었기 때문입니다. 할당 된 메모리가 없습니다 = 메모리를 해제해야합니다. 분명하지만 내가 몇 달 전에 이것을 본적이 있다면 왜 당신은 릴리스를 사용하지 않을 것인가 모르겠다 :) – Elmo

8

에서 ARC :

NSDictionary *myDictionary = [NSDictionary dictionaryWithObjectsAndKeys:@"1", @"A", @"2", @"B", nil]; 

NSInteger count = [myDictionary count]; 
id __unsafe_unretained objects[count]; 
id __unsafe_unretained keys[count]; 
[myDictionary getObjects:objects andKeys:keys]; 

for (int i = 0; i < count; i++) { 
    id obj = objects[i]; 
    id key = keys[i]; 
    NSLog(@"%@ -> %@", obj, key); 
}