2009-09-14 10 views
29

मैं उद्देश्य-सी में एक फ़ंक्शन लिखना चाहता हूं जैसे नीचे दिया गया है, जो तर्कों की एक चर संख्या लेता है, और उन तर्कों को पास करता है +stringWithFormat:। मुझे vsnprintf के बारे में पता है, लेकिन इससे एनएसएसटींग 'प्रारूप' को सी और बैक में परिवर्तित करने का अर्थ होगा (और इसका मतलब यह भी होगा कि इसके भीतर स्वरूपण प्लेसहोल्डर्स को भी परिवर्तित करना ...)।NSString's + stringWithFormat पर तर्कों की एक चर संख्या को "पास" कैसे करें:

कोड नीचे संकलित, लेकिन निश्चित रूप से व्यवहार नहीं करता है मैं चाहता हूँ :)

NSString *estr(NSString *format, ...) { 
    va_list args; 
    va_start(args, format); 
    NSString *s = [NSString stringWithFormat:format, args]; 
    va_end(args); 
    return s; 
} 

असल: वहाँ +stringWithFormat: विधि का एक va_list के अनुकूल संस्करण है, या यह एक लिखने के लिए संभव है?

+0

बस प्रदर्शित करने के लिए कि यह सिर्फ एक खिलौना उदाहरण नहीं है है लगता नहीं है, मैं अच्छा लगेगा यहां इस तरह की एक विधि का भी उपयोग करें: http://cocoaheads.byu.edu/wiki/different-nslog –

+1

हां वास्तव में! एनएसएलओजी बहुत चतुर तरीका है, कभी-कभी इसे पढ़ने में मुश्किल होती है। मेरे मन में जो कुछ भी था, वह मेरे ऐप्स को अंतर्राष्ट्रीयकरण का एक बहुत ही आसान तरीका है ... मैं कुछ जैसे लिखना चाहता हूं (@ "फ़ाइल% @ नहीं खोल सकता", फ़ाइलपैथ); उदाहरण के लिए, और इसे विकास के शुरुआती चरणों में बस (ठीक से स्वरूपित) के रूप में वापस किया जाना चाहिए, उसके बाद बाद में एक उपकरण है जो सभी tr() कॉल पाता है, जो आवश्यक कॉलों के अनुवादों के लिए आवश्यक संसाधन फ़ाइलों को बनाता है, फिर बाद में मैं सिर्फ एक स्विच फ्लिप करता हूं और tr() कॉल वास्तव में लुकअप करते हैं और उनके द्वारा पारित संदेशों का अनुवाद करते हैं ... –

उत्तर

46

initWithFormat:arguments:

NSString *estr(NSString *format, ...) { 
    va_list args; 
    va_start(args, format); 
    NSString *s = [[[NSString alloc] initWithFormat:format arguments:args] autorelease]; 
    va_end(args); 
    return s; 
} 

वे एक सुविधा निर्माता "stringWith ..." संस्करण

+0

दरअसल! बहुत बहुत धन्यवाद, मैं गलत जगह पर देख रहा था (साथ ही, मैं 'autorelease' पर कॉल भूल गया)। यह काम! –

+5

आप सही हैं, उनके पास सुविधा सुविधा समतुल्य नहीं है। मैंने कुछ महीने पहले इस सटीक चीज का अनुरोध करने के लिए रडार (# 7025084) दायर किया था। यदि आप इस कार्यक्षमता को चाहते हैं, तो कृपया '+ [एनएसएसटींग स्ट्रिंग विथफॉर्मेट: तर्क:]' का अनुरोध करने वाले बग की रिपोर्ट करें और इस रडार नंबर का संदर्भ लें - डुप्लीकेट्स (एक पहले से ही है) सर्वश्रेष्ठ डेवलपर उन मुद्दों पर "मतदान" पर कर सकते हैं, जिन्हें वे मानते हैं जरूरी। http://bugreport.apple.com –

+1

नोट: ट्रायज़ को सरल बनाने के लिए, यदि आप डुप्लिकेट बग फ़ाइल करते हैं, तो कृपया घटक नाम "एनएसएसटींग" और संस्करण "एक्स" का उपयोग करें। धन्यवाद! –

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