2010-05-24 10 views
7

का उदाहरण मुझे [NSDictionary getObjects:andKeys:] विधि का एक उदाहरण उदाहरण नहीं मिला। केवल example मुझे मिल सकता है, संकलित नहीं करता है। अगर कोई उन्हें खोज रहा है तो मैंने यहां त्रुटियों/चेतावनियां प्रदान की हैं।[NSDictionary getObjects: औरKeys:]

कारण मैं उलझन में था क्योंकि NSDictionary पर अधिकांश विधियां NSArray लौटाती हैं। हालांकि, documentation में यह बताता है कि इस विधि के बाहर चर को सी सरणी के रूप में वापस कर दिया गया है।

यहाँ त्रुटि संदेश/चेतावनी यदि आप लिंक किए गए उदाहरण का अनुसरण आपको मिल सकता है कर रहे हैं:

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

मैं जारी करने की आवश्यकता है ओबीजे और कुंजी? – Cesar

+0

उपरोक्त कोड उदाहरण में कुछ भी जारी न करें। –

+0

बस किसी को भी आश्चर्य हो रहा है कि आपको कुछ भी जारी करने की आवश्यकता क्यों नहीं है (यह एक ऐसी चीज थी जिसने मुझे शुरुआती विकास में मारा) ऐसा इसलिए है क्योंकि कुछ भी आवंटित नहीं किया गया था। कोई मेमोरी आवंटित नहीं है = रिलीज होने की कोई मेमोरी नहीं है। स्पष्ट लेकिन अगर मैंने इसे कुछ महीने पहले देखा होगा तो मुझे नहीं पता होगा कि आप रिलीज का उपयोग क्यों नहीं करेंगे :) – Elmo

8

एआरसी के तहत समाधान के रूप में इस प्रकार है (सरणी परिभाषाओं को जोड़ा गया __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); 
}