2011-08-24 14 views
6

पर कोई छवि (या अन्य संसाधन) जोड़ें मान लें कि मेरे पास एक मौजूदा आईओएस या मैक फ्रेमवर्क है जिसे हम Test.framework पर कॉल करेंगे। इस ढांचे ने संकलित और सफलतापूर्वक लिंक किया है (आईओएस भाग के लिए i386 और armv6/7 archs दोनों को लिपो करने के लिए एक चाल की गई थी) और पूरी तरह से ठीक काम कर रहा है।मैक या आईओएस फ्रेमवर्क

अब मैं इसे एक छवि जोड़ना चाहता हूं चलिए इसे 'test.png' कहते हैं। मैं इसे अपने ढांचे के संसाधन फ़ोल्डर में कॉपी किया है तो मैं निम्नलिखित संरचना है: जब मैं अपने ढांचे का उपयोग कर एक प्रोजेक्ट बना फिर भी

ls Test.framework 

- Headers -> Versions/Current/Headers 
- Resources -> Versions/Current/Resources 
- Test -> Versions/Current/Test 
- Versions 

ls Test.framework/Resources 

- Info.plist 
- test.png 

मुझे लगता है कि छवि को एक्सेस नहीं कर सकते हैं।

मैं कोशिश की है:

[UIImage imageNamed:@"test.png"] 
[UIImage imageNamed:@"Test.framework/test.png"] 
[UIImage imageNamed:@"Test.framework/Resources/test.png"] 

लेकिन कुछ भी नहीं बाहर काम किया है कि हमेशा मुझे वापस दे दी एक nil वस्तु।

कोई विचार?

संपादित

बहुत आगे की जांच पड़ताल के बाद यह है कि मैं क्या पूरा करने के लिए iOS पर नहीं किया जा सकता कोशिश कर रहा हूँ लगता है। इसका कारण यह है कि अंतिम एप्लिकेशन बंडल (.app) निजी ढांचे की प्रतिलिपि नहीं करता है जहां मैक ओएस के लिए संकलित अनुप्रयोग होंगे।

यह iOS Bundle Structures documentation में आगे विस्तृत है।

रोब केनगर और जुज़े को उनकी सराहना की सहायता के लिए धन्यवाद। मैं जवाब के लिए xuzhe क्रेडिट करूँगा क्योंकि यह वास्तव में मेरी मूल समस्या का सबसे उचित उत्तर है (भले ही रॉब टिप्पणी ने मुझे इस मुद्दे में काफी गहराई से खोला)

उत्तर

4

"imageNamed:" विधि केवल आपके ऐप में छवियों के लिए है बंडल। आपको

[[UIImage alloc] initWithContentsOfFile:path]; 

का उपयोग करना चाहिए।

पथ के बारे में, क्योंकि मुझे यकीन नहीं है कि "टेस्ट.फ्रेमवर्क" आपके अंदर है ऐप बंडल, मैं आपको नमूना कोड नहीं दे पा रहा हूं। लेकिन अगर यह खुराक, नीचे दिए गए कोड काम करना चाहिए:

NSString* path = [Nsstring stringWithFormat:@"%@/Test.framework/Resources/test.png", [[NSBundle mainBundle] bundlePath]]; 
+0

कह रहा है कि '' छवि 'नामित: "विधि केवल आपके ऐप बंडल की छवियों के लिए है' पूरी तरह से सच नहीं है। अगर मैं अपनी परियोजना में एक बंडल (test.bundle कहता हूं) जोड़ता हूं और इस बंडल में test.png है तो [UIImage imageNamed: @ "test/test.png"] अच्छी तरह से काम करेगा। – apouche

+0

हालांकि आपका समाधान दिलचस्प है, लेकिन मेरे पास मेरे आवेदन में बंडल नहीं किया गया है (इसे कमांड फ्रेमवर्क फ़ोल्डरों में स्थापित किया जा सकता है) – apouche

+0

@apouche यदि आप अपने ऐप बंडल में बंडल जोड़ रहे हैं और फिर '[UIImage imageNamed: @ "test.bundle/test.png"]; 'यह ठीक है क्योंकि test.bundle मुख्य बंडल में भी है। यदि ऐसा नहीं है, तो मुझे संदेह है कि "imageNamed:" इसे ढूंढ सकता है। – xuzhe

3

आप एक विशेष वर्ग [NSBundle bundleForClass:[SomeClass class]] प्रयोग करने के लिए बंडल प्राप्त कर सकते हैं। आपको बस इतना करना है कि ढांचे में परिभाषित कक्षा में पास हो और आपके पास ढांचे के बंडल का संदर्भ होगा।

फिर आप बंडल पथ के लिए छवि के लिए NSBundle की pathForResource:ofType: पद्धति का उपयोग करके पूछ सकते हैं, और फिर अपने छवि बनाने के लिए NSImage की initWithContentsOfFile: विधि का उपयोग करें।

ध्यान दें कि आपको कभी भी हार्ड-कोड पथ नहीं होना चाहिए। कभी। संसाधनों के पथ प्राप्त करने के लिए कई अलग-अलग फ़ंक्शन और विधियां हैं, आपको उन्हें हार्ड-कोड करने की आवश्यकता नहीं है।

+1

यह काफी स्मार्ट है लेकिन दुर्भाग्य से यह वास्तव में अपेक्षित नतीजे नहीं देता है। जब मैंने 'एनएसबंडल बंडलफोर्क्लास: [कुछ क्लास क्लास]] किया था, तो उसने मुझे मुख्य बंडल के समान सटीक वस्तु वापस दे दी। इसका कारण यह है कि मेरे टेस्ट.फ्रेमवर्क से उपयोग की जाने वाली सभी कक्षाओं को अंतिम परियोजना बाइनरी में जोड़ा गया था और अंतिम .app पथ में 'प्रतिलिपि' नहीं किया गया था। तो अंत में संसाधनों को छोड़ दिया जाता है :( – apouche

+0

आपकी मदद के लिए धन्यवाद, जो मैं पूरा करना चाहता था, आईओएस पर नहीं किया जा सकता है, अगर आप अधिक जानकारी चाहते हैं तो कृपया मेरे संपादन का संदर्भ लें – apouche

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