2009-11-01 12 views
18

मैंने एक्सकोड में एक स्थिर लाइब्रेरी बनाई है, जिसे मैं अन्य परियोजनाओं में सफलतापूर्वक उपयोग करने में सक्षम हूं। हालांकि, plists जैसे संसाधनों के साथ, मुझे लगता है कि मुझे मुख्य परियोजना में मेरी लाइब्रेरी में संदर्भित किसी भी सूची को शामिल करना होगा जहां परियोजना का उपयोग किया जाता है।ओएसजे-सी स्टेटिक लाइब्रेरी में एनएसबंडल, प्लेस्ट और अन्य संसाधन

मेरी स्थिर पुस्तकालय परियोजना में, मेरे पास लक्ष्य के "कॉपी बंडल संसाधन" चरण में मेरी योजना शामिल है।

NSBundle *mainBundle = [NSBundle mainBundle]; 
NSString *filePath = [mainBundle pathForResource:@"MyClassParams" ofType:@"plist"]; 

NSMutableDictionary* params = [[NSMutableDictionary alloc] initWithContentsOfFile:filePath]; 

अगर मैं mainBundle का उपयोग करें और MyClassParams.plist मुख्य परियोजना में शामिल है, सब अच्छा है: मेरे कोड में, यहाँ मैं क्या कर रहा हूँ है। यदि MyClassParams.plist लाइब्रेरी प्रोजेक्ट में शामिल है, तो यह काम नहीं करता है।

NSBundle *mainBundle = [NSBundle bundleForClass:[MyClass class]]; 

यह या तो काम नहीं किया:

धारणा है कि [NSBundle mainBundle] गलत स्थिर विधि को संदर्भित किया गया था का उपयोग करने पर, मैं यह नियुक्ति की गई।

तो, क्या एक स्थिर पुस्तकालय के साथ एक प्लिस्ट या किसी अन्य संसाधन को शामिल करना संभव है - या क्या मुझे उस परियोजना में जो कुछ भी चाहिए, उसे शामिल करना है जहां lib का उपयोग किया जाता है?

+0

प्रश्न के साथ एक बाउंटी शुरू करना - स्वीकार्य उत्तर अभी भी आईओएस 4.2 के रूप में सही है? –

उत्तर

17

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

तो हां, आपको उस परियोजना में सभी संसाधनों की प्रतिलिपि बनाने की आवश्यकता है, जिसमें आप स्थिर ढांचे को जोड़ रहे हैं।

+0

उत्तर के लिए धन्यवाद। – Vickram

12

मुझे पता है कि आप संसाधन फ़ाइलों को एक स्थिर पुस्तकालय में शामिल नहीं कर सकते हैं (यही फ्रेमवर्क करता है)। स्थिर पुस्तकालय "YYY" परियोजना के अंदर

: मैं अपनी परियोजनाओं में एक और समाधान का उपयोग

  • मैं अपने स्थिर पुस्तकालय परियोजना के लिए एक "Loadable बंडल" लक्ष्य जोड़ने (लक्ष्य, कोको, Loadable बंडल जोड़े)

      :
    • मैं मुख्य परियोजना के अंदर स्थिर पुस्तकालय लक्ष्य

    की निर्भरता के रूप में इस लक्ष्य जोड़ने

  • लिंक libYYY.a
  • की नकल की संसाधन फ़ाइलों

इस तरह, संसाधन स्थिर पुस्तकालय में उपयोग की गई फ़ाइलों मुख्य परियोजना में कामयाब नहीं कर रहे हैं करने के लिए बंडल YYY.bundle जोड़ें।

NSBundle *staticLibBundle = [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:@"YYY" ofType:@"bundle"]]; 
NSString *filePath = [staticLibBundle pathForResource:@"MyClassParams" ofType:@"plist"]; 

NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithContentsOfFile:filePath]; 

नीचे, दो स्क्रीनशॉट::

  • मैं उपयोग

    [UIImage imageNamed:@"YYY.bundle/foo.png"] 
    

    फिर आप इस तरह अपने plist मिल सकता है मैं स्थिर पुस्तकालय में एक foo.png तस्वीर कहते हैं, छोड़ दिया: लोड करने योग्य बंडल लक्ष्य के साथ स्थैतिक पुस्तकालय परियोजना

  • दाएं: स्थिर लाइब्रेरी बाइनरी को "लाइब्रेरी के साथ लिंक बाइनरी" में जोड़ा गया है और संसाधन बंडल को "कॉपी बंडल संसाधन" में जोड़ा गया है।

Static library project Main project

+0

हाय jilouc। मैं अंतिम चरण के साथ अटक गया हूँ। संसाधन फ़ाइलों की प्रतिलिपि बनाई गई है? । कृपया बताएं – thndrkiss

+1

@thndrkiss बस आपको बंडल फ़ाइल को खींचें और छोड़ें संसाधन (जैसा कि आप किसी अन्य संसाधन फ़ाइल के लिए करेंगे) और इसे अपने प्रोजेक्ट लक्ष्य में जोड़ें। मैंने एक स्क्रीनशॉट जोड़ा है। – Jilouc

+0

धन्यवाद दोस्त। ।इसने काम कर दिया ! । । – thndrkiss

2

मैं सब कुछ @Jilouc सुझाव का पालन किया है, तथापि, मैं बंडल प्राप्त कर सकते हैं, लेकिन यह अंदर फ़ाइलें प्राप्त करने में विफल रहा है। मैंने दोनों तरीकों (@"yyy.bundle/image" या staticlib pathforresource...)

फिर मैंने नीचे दी गई विधि का उपयोग किया और यह काम किया!

NSBundle *staticBundle = [NSBundle bundleWithPath:[[[NSBundle mainBundle]resourcePath] stringByAppendingPathComponent:@"yy.bundle"]]; 

NSString *filePath = [[jsBundle resourcePath]stringByAppendingPathComponent:fileName]; 

NSString* content = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:NULL]; 
संबंधित मुद्दे