2013-01-17 24 views
7

मैं एक विशेष संदेश है कि ठीक काम करता है, तो दूसरा पैरामीटर एक चर के रूप में पारित हो जाता है में NSLocalizedString उपयोग कर रहा हूँ का प्रयोग करें, लेकिन Use of undeclared identifier 'NSLocalizedString' और Too many arguments provided to function-like macro invocation साथ विफल रहता है दूसरा पैरामीटर चर के रूप में बिल्कुल वैसा ही लिखा है सेट था। मेरे पास चर का उपयोग कर कोड काम कर रहा है, जो ठीक है, मैं सिर्फ यह जानने में विफलता के कारणों को समझना चाहता हूं कि अन्य परिस्थितियों में इसे कैसे टालना है।NSLocalizedString - अघोषित पहचानकर्ता मुद्दा

निम्नलिखित घोषणाओं के साथ:

NSString *branchTitle = [branchDictionary objectForKey:@"Title"]; 
NSString *localString = [NSMutableString stringWithFormat:@"%@ node title", branchTitle]; 

यह कोई त्रुटियों के साथ ठीक काम करता है:

[navItem setTitle:NSLocalizedString(branchTitle, localString)]; 

... लेकिन यह है, जो मुझे के समान लगता है, त्रुटियों कि ऊपर उल्लेख किया साथ विफल:

[navItem setTitle:NSLocalizedString(branchTitle, [NSMutableString stringWithFormat:@"%@ node title", branchTitle])]; 

यहां और अन्य जगहों पर खोजना मुझे स्पष्टीकरण नहीं मिला है। मैंने प्रत्येक त्रुटि संदेश और विभिन्न NSLocalizedString मुद्दों पर कई हिट के माध्यम से पढ़ा, लेकिन कुछ भी जो उन्हें एक साथ बंधे नहीं। दूसरे त्रुटि संदेश के बारे में जो मैंने पाया वह शायद कंगन और कथन में अल्पविरामों की संख्या के साथ एक मुद्दा बताता है, यह दर्शाता है कि अतिरिक्त कॉमा NSMutableString संदेश के भीतर है, फिर भी इसे NSLocalizedString द्वारा अतिरिक्त पैरामीटर के रूप में देखा जा रहा था। क्या इसका कोई मतलब है?

प्रश्न के लिए महत्वपूर्ण नहीं है, लेकिन कथन का उद्देश्य एक शब्दकोश से निकाले गए अंग्रेजी संस्करण के आधार पर नेविगेशन बार शीर्षक के स्थानीय संस्करण को सेट करना है, जो अलग-अलग विचारों के लिए भिन्न होता है। NSMutableString भाग अंग्रेजी शीर्षक के आधार पर स्थानीयकरण के लिए टिप्पणी को परिभाषित करता है।

संपादित करें: स्वीकृत उत्तर के अनुसार इस मुद्दे को हल करने के बाद, मैंने एक और संबंधित मुद्दा देखा। localString की घोषणा "Unused variable" कंपाइलर चेतावनी का उत्पादन कर रही थी, हालांकि इसका स्पष्ट रूप से उपयोग किया जा रहा था। यह सी-मैक्रो के भीतर और पूर्णता के लिए होने के कारण भी है, मैं उस चेतावनी को दबाने के बारे में एक प्रासंगिक पोस्ट में एक लिंक जोड़ रहा हूं: How can I get rid of an “unused variable” warning in Xcode

उत्तर

14

मुझे विश्वास है कि यह खराब सी-मैक्रो विस्तार का परिणाम है। दरअसल, यदि आप लिखते हैं:

NSLocalizedString(branchTitle, ([NSString stringWithFormat:@"%@ node title", branchTitle])); 

यह संकलित होगा। किसी कारण से, पूर्वप्रक्रमक अच्छी तरह से निपटने नहीं है [] (संभवतः क्योंकि यह ऑब्जेक्टिव-सी कॉल के बारे में पता नहीं है) और अलग तर्कों के रूप [] भीतर सभी तत्वों व्यवहार करता है के भीतर पाठ:

#define NSLocalizedString(key, comment) \ 
    [[NSBundle mainBundle] localizedStringForKey:(key) value:@"" table:nil] 

पुनश्च: जब मैं ने लिखा है

मैक्रो विस्तार एक मुश्किल आपरेशन, बुरा कोने मामलों और स्थितियों है कि प्रस्तुत करना आप क्या सोचा पूर्वप्रक्रमक के विस्तार एल्गोरिथ्म काफी सूक्ष्म तरीके में गलत अनुकूलन करने के लिए एक गंधा रास्ता नहीं था से भरा है: बुरा सी मैक्रो विस्तार, मैं this मतलब ।

+2

अच्छा, केवल कोष्ठक का एक सेट जोड़ना इसे ठीक करता है। NSLocalizedString पहला सी-मैक्रो है जिसे मैंने जानबूझकर उद्देश्य-सी के भीतर उपयोग किया है, इसलिए जब दूसरों के चारों ओर घूमते हैं तो यह ध्यान में रखना एक अच्छी युक्ति है। धन्यवाद! –

+0

मदद करने में खुशी हुई! – sergio