2011-12-30 16 views
5

वहाँ एसडीके कि स्ट्रिंग की एक सूची के लिए पूछने में कई तरीके हैं, एक शून्य द्वारा समाप्त, उदाहरण के लिए, UIActionSheet में हैं:के रूप में एक शून्य-समाप्त NSString सूची का निर्माण एक NSString *

- (id)initWithTitle:(NSString *)title delegate:(id <UIActionSheetDelegate>)delegate cancelButtonTitle:(NSString *)cancelButtonTitle destructiveButtonTitle:(NSString *)destructiveButtonTitle otherButtonTitles:(NSString *)otherButtonTitles, ... 

'otherButtonTitles' इस मामले में एक शून्य के साथ समाप्त एनएसएसआरटींग की एक सूची है। मैं क्या करना चाहता हूं यह एनएसएसटींग्स ​​के एक निर्मित एनएसएमयूटेबलएरे के साथ इस विधि को कॉल करें, क्योंकि मैं तर्कों को गतिशील रूप से बनाना और क्रमबद्ध करना चाहता हूं। यह मैं कैसे करूंगा? मुझे यकीन नहीं है कि इस मामले में एनएसएसआरटींग्स ​​को शून्य-समाप्त पॉइंटर कैसे बनाया जाए, और यदि इसे पास करना भी काम करेगा। क्या मुझे इसके लिए मेमोरी आवंटित करना है और इसे रिलीज़ करना है?

उत्तर

9

आप किसी भी सरणी को एक भिन्न सूची में परिवर्तित नहीं कर सकते हैं।

हालांकि, UIActionSheet के लिए, आप उन otherButtonTitles के बाद चादर बनाई गई है जोड़ सकता है, का उपयोग कर -addButtonWithTitle:

UIActionSheet* sheet = [[UIActionSheet alloc] initWithTitle:... 
                 /*etc*/ 
              otherButtonTitles:nil]; 
for (NSString* otherButtonTitle in otherButtonTitlesArray) 
{ 
    [sheet addButtonWithTitle:otherButtonTitle]; 
} 
+4

यह एक अच्छा समाधान यदि आप एक अपने UIActionSheet पर रद्द बटन सेट कर रहे हैं नहीं है। जब आप शीट शुरू करते हैं और फिर ऊपर के रूप में लूप के साथ 'अन्य बटन' जोड़ें, तो आपका रद्द करें बटन कुछ कारणों से उनके ऊपर बैठेगा। – Arnold

+0

समस्या को हल करना चाहिए। [शीट सेट कैंसलबटन इंडेक्स: [शीट नंबरऑफबटन] - 1]; – mtwagner

+0

@mtwagner nope यह केवल बटन की शैली को बदलता है - क्रम में वे –

5

मैं भी एक गतिशील कार्रवाई शीट बनाने की जरूरत है। इसलिए मैंने ज्यादातर खाली एक्शन शीट बनाई। मेरे बटन जोड़ा गया। फिर रद्द करें बटन जोड़ा और इसे रद्द के रूप में चिह्नित किया।

sheet = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:homeName, nil];  
[sheet addButtonWithTitle:otherButton1]; 
[sheet addButtonWithTitle:otherButton2]; 
[sheet addButtonWithTitle:@"Cancel"]; 
[sheet setCancelButtonIndex:[sheet numberOfButtons] - 1]; 
sheet.actionSheetStyle = UIActionSheetStyleBlackTranslucent; 
[sheet showInView:self.view]; 
[sheet release]; 
+0

यह स्वीकार किए गए एक से अधिक पूर्ण उत्तर है.धन्यवाद! –

1

तुम्हें यकीन NSArray va_list को बदल सकते हैं। उदाहरण NSString

- (id)initWithFormat:(NSString *)format arguments:(va_list)argList 

इस तरह के साथ उपयोग करने के लिए के लिए:

+ (id)stringWithFormat:(NSString *)format array:(NSArray *)arguments; 
{ 
    NSRange range = NSMakeRange(0, [arguments count]); 
    NSMutableData *data = [NSMutableData dataWithLength:sizeof(id) * [arguments count]]; 
    [arguments getObjects:(__unsafe_unretained id *) data.mutableBytes range:range]; 
    return [[NSString alloc] initWithFormat:format arguments:data.mutableBytes]; 
} 
+0

यह कहना अच्छा है कि आप इसे कर सकते हैं, एक अलग उपयोग मामले की ओर इशारा करते हुए; लेकिन क्या आप ओपी द्वारा दिए गए उपयोग के मामले के लिए ऐसा कर सकते हैं? – Ryan

+0

यह स्वीकार्य उत्तर की पहली पंक्ति के लिए टिप्पणी है, इसलिए आपकी टिप्पणी आवश्यक नहीं है – LorikMalorik