2012-01-31 16 views
10

मैंने अपना खुद का ढांचा विकसित किया है जिसमें उपयोगी कक्षाएं/विधियां हैं जिनका मैं अक्सर अपने ऐप्स में उपयोग करता हूं। हाल ही में, मैंने अपनी खुद की विधियों को जोड़ने के लिए एनएसएसटींग "एनएसएसटींग + एक्सटेंशन एच/एम" के लिए कक्षा विस्तार जोड़ा है। उदाहरण:कक्षा विस्तार और ढांचे

  • NSString + Extensions.h
@interface NSString (Extensions) 
- (NSString *)removeDiacritics; 
@end 
  • NSString + Extensions.m
#import "NSString+Extensions.h" 

@implementation NSString (Extensions) 

- (NSString *)removeDiacritics 
{ 
    return [[[NSString alloc] initWithData:[self dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES] encoding:NSASCIIStringEncoding] autorelease]; 
} 

@end 

मैं सफलतापूर्वक अपने ढांचे को संकलित करता हूं। लेकिन जब मैं किसी भी आवेदन में इस वर्ग के विस्तार के कार्यों में से एक का उपयोग करने का प्रयास करें:

  • AppDelegate.m
// CUtils is the name of the framework. CUtils.h contains #import of all header files 
// contained in my framework 
#import <CUtils/CUtils.h> 


    @implementation AppDelegate 

    ... 

    - (void)applicationDidBecomeActive:(UIApplication *)application 
    { 
     /* 
     Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previouslyin the background, optionally refresh the user interface. 
     */ 

     NSString *toto = @"Je suis une chaîne avec des caractères spéciaux"; 
     NSLog(@"%@", toto); 
     NSLog(@"%@", [toto removeDiacritics]); 
    } 

...

मैं निम्नलिखित त्रुटि:

2012-01-31 17: 01: 09.921 टेस्टक्विट्स [4782: 207] जी सुईस उने चायन avec des caractères SPECIAUX 2012-01-31 17: 01: ०९.९२४ TestCUtils [4782: 207] - [__ NSCFConstantString removeDiacritics]: गैर मान्यता प्राप्त चयनकर्ता

लेकिन मैं अपने वर्ग एक्सटेंशन जोड़ने अगर सीधे उदाहरण 0x340c के लिए भेजा आवेदन में (मेरे ढांचे के बाहर), यह ठीक काम करता है ...

कोई संकेत?

** संपादित करें **

के रूप में आप में से कुछ कहा है, मैं -all_load और 'अन्य लिंकर झंडे' में -ObjC विकल्पों चुके हैं, लेकिन मुद्दा बनी हुई है।

enter image description here

उत्तर

9

में #import "NSString+Extensions.h" करने की जरूरत है इस technical Q&A कि -ObjC और -all_load विकल्पों @Ell नील उल्लेख बताते हैं पर एक नजर डालें -all_load

+0

बहुत बढ़िया! यह काम करता हैं। मैंने अपने आवेदन लक्ष्य में केवल -ओबीजेसी लिंकर ध्वज जोड़ा है और यह काम कर रहा है। हालांकि हमारे पास एक सवाल है। मेरे ढांचे में, मैंने SQLite डेटाबेस को प्रबंधित करने के लिए एक कक्षा बनाई है, इसलिए मुझे libsqlite3.dylib को जोड़ने की आवश्यकता है। जब मैं इस नए लिंकर ध्वज के साथ अपने आवेदन में अपना ढांचा जोड़ता हूं, तो मेरे पास संकलन त्रुटियों की वजह से मैं libsqlite3.dylib को लिंक नहीं करता हूं, भले ही मैं इसे पहले से ही अपने ढांचे के अंदर जोड़ता हूं (पता नहीं कि मैं स्पष्ट हूं पर्याप्त)। शायद मुझे कुछ याद आ रहा है ... – Niko

+0

यह शायद एक अलग सवाल के रूप में योग्यता प्राप्त करता है। आम तौर पर, आपको अपने आवेदन में आश्रित पुस्तकालयों को स्पष्ट रूप से लिंक करना होगा। यह अच्छा होगा अगर कस्टम फ्रेमवर्क को जोड़ने से निर्भर पुस्तकालयों में भी खींच आएगी, लेकिन मुझे नहीं लगता कि ऐसा करने का कोई तरीका है। –

3

आप अपने निर्माण सेटिंग्स में -ObjCको अन्य लिंकर झंडे जोड़ने की जरूरत है। अगर यह काम नहीं करता है, ऐसा लगता है कि आप अपने AppDelegate.m

+0

आपके त्वरित उत्तर के लिए धन्यवाद। मैंने पहले ही ऐसा किया है: एक ही मुद्दा। – Niko

+1

मुझे लगता है कि यह उत्तर सही है, क्या आप सुनिश्चित हैं कि आप इन दोनों झंडे को अपने सक्रिय लक्ष्य में जोड़ दें? कभी-कभी मैंने उन्हें अपनी परियोजना में जोड़ा और लक्ष्य में उनका उत्तराधिकारी बनना भूल गया, और यही कारण है कि मैंने अपनी श्रेणियां नहीं देखीं। – lawicko

+0

@lawicko: हाँ, मैंने अपने विकल्पों में उन विकल्पों को जोड़ा है, कृपया मेरी संपादित पोस्ट पर एक नज़र डालें। – Niko

1

जोड़ने का प्रयास करें ।

नोट लिंकर विकल्पों परियोजना है कि ढांचा (अर्थात ढांचे के ग्राहक) लिंक हो रहा है पर स्थापित किया जाना नहीं ढांचा ही जरूरत है। आपके स्क्रीनशॉट से ऐसा लगता है कि आप अपने फ्रेमवर्क प्रोजेक्ट पर विकल्प सेट कर रहे हैं क्योंकि मैं बाईं ओर स्रोत फ़ाइल NString+Extensions.m देख सकता हूं।

+1

ऐसा नहीं करने से केवल एक निर्माण चेतावनी हो सकती है, न कि क्रैश। –

+0

AppDelegate.m में, मैंने # आयात जोड़ा है। CUtils मेरा ढांचा नाम है, CUtils.h में # मेरे फ्रेमवर्क में निहित सभी शीर्षलेख फ़ाइलों का आयात है (NSString + Extensions.h शामिल) – Niko

+0

मुझे विश्वास है कि आपको सभी एच फाइलों की आवश्यकता होगी –

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