2012-09-10 11 views
10

मेरे पास NSString श्रेणी वर्ग (NSString+URLEncoding.h) है। मैं दौड़ रहा हूं और अज्ञात चयनकर्ता क्रैश कर रहा हूं, क्योंकि जिस स्ट्रिंग को मैं श्रेणी विधि कह रहा हूं उसे आईओएस द्वारा NSCFConstantString में अनुकूलित किया गया है।आईओएस 5: एनएसएसटींग श्रेणी बनाएं एनएससीएफसी कॉन्स्टेंटस्ट्रिंग शामिल करें?

-[__NSCFConstantString URLEncodedString]: unrecognized selector sent to instance 0x290174 

मैं से iOS 5 में NSCFString अनुकूलन NSCFConstantString बनाम का पता चला: http://www.cocoanetics.com/2012/03/beware-of-nsstring-optimizations/

कैसे मैं NSString श्रेणी प्राप्त कर सकते हैं लगातार तार शामिल हैं या यहां तक ​​कि होने के लिए वर के लिए मजबूर करने की किसी को भी अवगत है एक NSString/NSCFString और NSCFConstantString नहीं?

चीयर्स, जेड

-edit-

  • लिंकर झंडे -ObjC -all_load दोनों पहले से ही लागू किया
  • NSString + URLEncoding.m लक्ष्यों में शामिल है सूत्रों
  • NSString + URLEncoding संकलन कर रहे हैं। एम URLEncodedString विधि लागू करता है।
  • लाश के लिए जाँच की गई।

मैं ShareKit करने के लिए एक साझा करने वाली सेवा द्वारा जोड़ा जा रहा 2.0

हैडर:

@interface NSString (OAURLEncodingAdditions) 

- (NSString *)URLEncodedString; 

कार्यान्वयन:

@implementation NSString (OAURLEncodingAdditions) 

- (NSString *)URLEncodedString 
{ 
    NSString *result = (NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, 
                      (CFStringRef)self, 
                      NULL, 
                      CFSTR("!*'();:@&=+$,/?%#[]"), 
                      kCFStringEncodingUTF8); 
    [result autorelease]; 
    return result; 
} 
+0

क्या यह हल किया गया है? यदि ऐसा नहीं है, तो यदि आपको आवश्यकता हो तो मैं इसे हल करने का प्रयास कर सकता हूं? –

+0

आपके द्वारा लिंक किए गए ब्लॉग में '__NSCFConstantString' चीज एक लाल हेरिंग है।ब्लॉग में इस मुद्दे के साथ सबक्लासिंग और सबकुछ करने के लिए कुछ भी नहीं है, इस तथ्य के साथ कि ऐप्पल सभी रिक्त तारों को एक ऑब्जेक्ट में अनुकूलित करने का प्रयास करता है। यदि एक खाली स्ट्रिंग का प्रतिनिधित्व करने वाला एक ऑब्जेक्ट एक सरल 'एनएसएसटींग' था, तो ब्लॉग का कोड अभी भी टूटा जाएगा। – JeremyP

उत्तर

11

लिंकर के साथ कोई समस्या है जो किसी भी ऑब्जेक्ट फ़ाइलों को पूरी तरह से छोड़ने के लिए अपने मृत-कोड को अलग करने का कारण बन सकती है जिसमें केवल ओबीजे-सी श्रेणियां होती हैं (या जिन्हें अन्यथा संदर्भित किया जाता है)। सैद्धांतिक रूप से -ObjC लिंकर को ध्वज को पार करना इसे ठीक करना चाहिए, लेकिन यह हमेशा काम नहीं करता है। आप -all_load लिंकर ध्वज प्रदान करके इस समस्या के आसपास काम कर सकते हैं, जो लिंकर को हमेशा ऑब्जेक्ट फ़ाइलों में लिंक करने का कारण बनता है।

ध्यान दें कि आपको मूल प्रोजेक्ट पर -all_load सेट करना पड़ सकता है यदि आपकी श्रेणी उप-प्रोजेक्ट या लाइब्रेरी का हिस्सा है जिसे आप कहीं भी शामिल कर रहे हैं।

+0

संपादित, क्या आप फिर से एक नज़र डालेंगे? –

+0

बिल्कुल, यह मेरे लिए काम करता है। धन्यवाद ... :) –

2

__NSCFConstantString, NSString का एक उपवर्ग है तो NSString पर किसी भी श्रेणियों लागू __NSCFConstantString पर भी।

या तो आप अपनी श्रेणी में लिंक नहीं कर रहे हैं, या आपकी श्रेणी विधि को @implementation में परिभाषित नहीं करती है।

+0

संपादित, क्या आप फिर से एक नज़र डालेंगे? –

4

बस एक ही मुद्दे को समझने में 30 मिनट बिताए। लिंकर के साथ झुकाव के बाद मुझे पता चला कि यह श्रेणी संकलन स्रोत सूची में मेरे लक्ष्य के सूची चरण में मौजूद नहीं थी। यह जांचना सुनिश्चित करें कि यह वहां है।

+0

विशेष रूप से जब आपके पास एकाधिक लक्ष्य होते हैं, यदि आप एकाधिक लक्ष्य में नई अतिरिक्त फ़ाइल जोड़ना भूल जाते हैं, तो यह इस समस्या का कारण बन सकता है। – UnchartedWorks