2010-05-24 71 views
7

的示例我無法找到方法[NSDictionary getObjects:andKeys:]的工作示例。我能找到的唯一的example,沒有編譯。我在這裏提供了錯誤/警告,以防有人在搜索它們。[NSDictionary getObjects:andKeys:]

我感到困惑的原因是因爲NSDictionary上的大多數方法返回NSArray。但是,在documentation中,它聲明此方法的輸出變量作爲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); 
} 
+0

我是否需要釋放obj和關鍵? – Cesar 2010-09-03 00:59:55

+0

不要在上面的代碼示例中發佈任何內容。 – 2011-03-24 19:29:26

+0

爲了防止任何人想知道爲什麼你不需要發佈任何東西(這是在開發早期就殺了我的東西),這是因爲沒有任何東西被分配。沒有分配內存=沒有需要釋放的內存。明顯的,但如果我幾個月前看過這個,我不知道爲什麼你不會使用發佈:) – Elmo 2011-07-25 10:07:40

8

在ARC解決方案需要如下(__unsafe_unretained添加到陣列中的定義)來進行修改:

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); 
}