2010-04-07 17 views
8

क्या आदिम प्रारूप में घोंसले के सरणी के बिना दो आयामी एनएसएआरएआर बनाने का कोई तरीका है AFloatArray [] []।मल्टी-आयामी एनएसएआरएआरई ऑब्जेक्ट

धन्यवाद।

+3

आपको यह पूरा करने की आवश्यकता क्या है? शायद आपके द्वारा हल की जा रही समस्या के लिए अन्य दृष्टिकोण भी बेहतर हो सकते हैं। – jlehr

उत्तर

17

दुर्भाग्य से नहीं। एक बहु-आयामी NSArray बनाने के लिए:

NSArray *multiArray = [NSArray arrayWithObjects: 
    [NSMutableArray array], 
    [NSMutableArray array], 
    [NSMutableArray array], 
    [NSMutableArray array], nil]; 

// Add a value 
[[multiArray objectAtIndex:1] addObject:@"foo"]; 

// get the value 
NSString *value = [[multiArray objectAtIndex:1] objectAtIndex:0]; 

हालांकि, अगर आप सी कोड ऑब्जेक्टिव-सी में (क्योंकि यह सी के एक सख्त superset है) का उपयोग कर सकते है, अगर यह अपनी जरूरत फिट बैठता है के रूप में आप के लिए किया था आप सरणी की घोषणा कर सकता है सुझाव दिया।

+6

यदि आप कचरा संग्रहण का उपयोग नहीं कर रहे हैं, तो आप 'बहुआयामी' के अंदर प्रत्येक सरणी को लीक कर रहे हैं। ठीक करने के लिए, इसके बजाय '[NSMutableArray array] 'का उपयोग करें। –

+0

वास्तव में? यह मेरी समझ थी कि [एनएसएमयूटेबलएरे ऐरे] ने एक ऑटोरेलेस्ड एनएसएमयूटेबलएरे को वापस कर दिया, जो बदले में एनएसएआरएआरई द्वारा बनाए रखा जाएगा जिसमें इसे जोड़ा जा रहा है! मैं निश्चित रूप से इसे देख लूंगा क्योंकि यदि आप सही हैं, तो मेरे पास – FatalMojo

+1

हां के माध्यम से जाने के लिए बहुत सारे कोड हैं। मुद्दा यह है कि ऑटोरेलेज्ड ऑब्जेक्ट _is_ उस सरणी द्वारा बनाए रखा गया है जिसमें इसे जोड़ा गया है। जब अभिभावक सरणी जारी की जाती है, तो इसकी सामग्री भी होती है। यदि आप सरणी में '[एनएसएमयूटेबलएरे नया]' जोड़ते हैं, तो इसकी बरकरार गणना '2' हो जाती है। जब अभिभावक सरणी जारी की जाती है, तो उसके प्रत्येक बच्चे के पास अभी भी '1' की रख-रखाव होती है। –

10

आप ऐसा कर सकते हैं:

NSArray *array = @[@[@"0:0", @"0:1"], 
        @[@"1:0", @"1:1"]]; 

NSString *value = array[1][0]; 

मुझे लगता है कि इस से "objectAtIndex" सामान बहुत कम है।

लेकिन सावधान रहना आप का उपयोग किया है एप्पल LLVM संकलक संस्करण> = 4.0

+0

यह निश्चित रूप से आधुनिक दृष्टिकोण है। –

0

संग्रह या tableview cellForRowAtIndexPath में बहुआयामी सरणी में एक वस्तु सम्मिलित करने के लिए:

NSString *sectionRow = [NSString stringWithFormat:@"%d:%d", indexPath.section, indexPath.row];     
[dictionary setValue:[UIImage imageWithData:imageData] forKey:sectionRow]; 

संग्रह में बहुआयामी सरणी से एक वस्तु प्राप्त करने के लिए या TableView cellForRowAtIndexPath:

NSString *sectionRow = [NSString stringWithFormat:@"%d:%d", indexPath.section, indexPath.row];  
UIImage *cellImage = [dictionary valueForKey:sectionRow]; 
संबंधित मुद्दे