2012-04-02 19 views
7

मैंउद्देश्य सी में एनएसएआरएआरई ऑब्जेक्ट के एनएसएआरएआरई का उपयोग कैसे करें?

@property (nonatomic, assign) NSArray *scnArray; 

के रूप में और - (void)viewDidLoad के तहत ज फ़ाइल में मैं

NSArray *obj1 = [[NSArray alloc] initWithObjects:@"1",@"0",@"0",nil]; 
NSArray *obj2 = [[NSArray alloc] initWithObjects:@"0",@"3",@"0",nil]; 
NSArray *obj3 = [[NSArray alloc] initWithObjects:@"0",@"0",@"5",nil]; 

scnArray = [[NSArray alloc] initWithArray:obj1]; 
[scnArray arrayByAddingObjectsFromArray:obj2]; 
[scnArray arrayByAddingObjectsFromArray:obj3]; 

के रूप में तीन अलग-अलग NSArray वस्तुओं बनाया है और ज फ़ाइल में एक NSArray वस्तु घोषित करता है, तो मैं किसी अन्य समारोह से इस scnArray का उपयोग

NSArray *caseArray = [scnArray objectAtIndex:index]; // सूचकांक हो जाएगा 0, 1, 2 ...

मुझे BAD_ACCESS_ERROR मिल रहा है। यहां समस्या क्या है और मैं इसका उपयोग कैसे कर सकता हूं?

+0

आप ऑब्जेक्ट्स को 'obj2' और' obj3' से 'scnArray' में जोड़ रहे हैं लेकिन आप कहीं भी (या कहीं भी संग्रहीत नहीं कर रहे हैं) एरे के विलय से उत्पन्न सरणी ... मेरे उत्तर पर एक नज़र डालें ... –

+0

आपकी संपत्ति को 'मजबूत' या 'बनाए रखना' होना चाहिए, असाइन नहीं करना चाहिए। –

+0

धन्यवाद माइक, संपत्ति को मजबूत काम के रूप में बदल रहा है। आपके इनपुट के लिए सभी को धन्यवाद। – user1306926

उत्तर

5

इस प्रयास करें:

NSArray *obj1 = [[NSArray alloc] initWithObjects:@"1",@"0",@"0",nil]; 
NSArray *obj2 = [[NSArray alloc] initWithObjects:@"0",@"3",@"0",nil]; 
NSArray *obj3 = [[NSArray alloc] initWithObjects:@"0",@"0",@"5",nil]; 

scnArray = [[NSArray alloc] initWithArray:obj1]; 
scnArray = [scnArray arrayByAddingObjectsFromArray:obj2]; 
scnArray = [scnArray arrayByAddingObjectsFromArray:obj3]; 

arrayByAddingObjectsFromArray: समारोह सरणी एक करने के लिए सरणी बी से सभी वस्तुओं जोड़ता है, और परिणाम (दोनों एक और बी के तत्वों से युक्त सरणी =) लौट आते हैं।

तो, आप बस उस परिणाम मिलना चाहिए ... :-)

महत्वपूर्ण:scnArray एक NSMutableArray सरणी होना चाहिए, न कि किसी NSArray (यह बदल रहा है ना?); तो सुनिश्चित करें कि आप उस भाग को भी संपादित करें ...

ALSO:NSArray *caseArray = [scnArray objectAtIndex:index]; - इससे कोई अर्थ नहीं आता है। scnArray के किसी तत्व को सरणी सेट करना? इसमें सरणी नहीं है, है ना? इसमें केवल उन सरणी के तत्व हैं (जिन्हें हमने जोड़ा है) ...

2

arrayByAddingObject: रिसीवर को नई वस्तु नहीं जोड़ता है, यह एक पूरी तरह से नई सरणी बनाता है और इसे वापस करता है। आप की तरह कुछ का उपयोग करना चाहिए:

scnArray = [[NSArray alloc] initWithObjects: obj1, obj2, obj3, nil]; 

मत भूलना कि यदि आप एआरसी या जीसी उपयोग नहीं कर रहे हैं, इन सरणियों के सभी कुछ बिंदु पर जारी होने की आवश्यकता होगी।

+0

मैंने पहले इसका इस्तेमाल किया था। लेकिन मैं इसे NSArray * caseArray = [scnArray objectAtIndex: 1] के रूप में एक्सेस करता हूं; मैं EXE_BAD_ACCESS त्रुटि प्राप्त कर रहा हूं। – user1306926

संबंधित मुद्दे