2009-12-31 13 views
17

मैं वही कर रहा हूं, जब मैं बंडल में पथ के साथ एक छवि बनाता हूं:pathForResource? एक्सटेंशन का उपयोग किए बिना (आईफोन)

 
UIImage *image = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"image" ofType:@"jpg"]]; 

मैं क्या करना चाहता हूं, मेरी छवि के लिए पथ खोजने का प्रयास कर रहा है लेकिन विस्तार के बिना, बिना उपयोग किए 'टाइप टाइप' (क्योंकि मेरी छवि का नाम और उसका एक्सटेंशन मेरे डेटाबेस में स्टोर है) कुछ ऐसा है:

 
UIImage *image = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"image.jpg"]]; 

लेकिन मुझे नहीं पता कि यह कैसे करें।

सर्वश्रेष्ठ संबंध,

उत्तर

41

आप डीबी से प्राप्त स्ट्रिंग को क्यों विभाजित नहीं करते हैं?

NSString* fullFileName = @"image.jpg"; 
NSString* fileName = [[fullFileName lastPathComponent] stringByDeletingPathExtension]; 
NSString* extension = [fullFileName pathExtension]; 

अब आप बस का उपयोग कर सकते हैं:

[[NSBundle mainBundle] pathForResource:fileName ofType:extension]]; 
+0

मैं कोशिश करूँगा जैसे ही मैं घर पहुंच के रूप में मुझे लगता है कि पता नहीं है। धन्यवाद ~ – ludo

+0

यह बहुत अच्छा काम करता है! – rocky

+2

आपको एक्सटेंशन को अलग करने की आवश्यकता नहीं है। मेरा जवाब देखें मुझे नहीं पता कि मेरे दृष्टिकोण का उपयोग करके कोई प्रदर्शन प्रभाव पड़ता है या नहीं। –

0

सबसे आसान तरीका है नाम और अपने डेटाबेस में फ़ाइल प्रकार अलग से संग्रहीत करते हैं और यकीन नहीं पहले method.I'm का उपयोग कर कि आप बाद एक को लागू करने में सफल हो सकता है उन्हें पुनः प्राप्त करने के लिए है ।

+0

मुझे लगता है कि के thinkinf था, लेकिन बस एक्सटेंशन के लिए मेरे डेटाबेस में किसी स्तंभ बनाने मैं अगर इसके लिए सबसे अच्छा तरीका – ludo

2
- (NSData *)applicationDataFromFile:(NSString *)fileName { 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *appFile = [documentsDirectory stringByAppendingPathComponent:fileName]; 
    NSData *myData = [[[NSData alloc] initWithContentsOfFile:appFile] autorelease]; 
    return myData; 
} 

आसानी से अनुकूलित किया जा सकता है अगर आप एक NSData की एक UIImage वापस जाने के लिए बजाय यह चाहते थे http://developer.apple.com/iphone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/FilesandNetworking/FilesandNetworking.html#//apple_ref/doc/uid/TP40007072-CH21-SW21

से लिया।

इसके अलावा, आप यह नहीं कहते कि क्या आप दस्तावेज़ निर्देशिका में छवियों को सहेज रहे हैं, या संकलन से पहले उन्हें अपने ऐप बंडल में जोड़ रहे हैं। क्योंकि यदि यह बाद वाला है, तो आप छवि प्राप्त करने के लिए [UIImage imageNamed:(NSString *)filename] का उपयोग कर सकते हैं। यह फ़ाइल नाम के हिस्से के रूप में विस्तार की अपेक्षा करता है।

+0

फ़ाइल संकलन से पहले जोड़ रही है। उत्तर – ludo

0

मैंने पाया कि ".jpg" के विस्तार के साथ ऐप को आईपॉड टच पर काम करने के लिए विस्तार के लिए टाइप करना आवश्यक था, जबकि ".png" के विस्तार के साथ मैं बस "छवि" डाल सकता था। पीएनजी "pathForResource में और टाइप के प्रकार: शून्य। लेकिन सभी संस्करण सिम्युलेटर पर काम किया।

एप्लिकेशन बंडल छवि फ़ाइल शामिल है, और मैं उपयोग कर रहा हूँ:

[[NSBundle mainBundle] pathForResource:@"Auto" ofType:@"jpg"] 

एक रास्ता मिलता है।

20

आप विस्तार से गुजरने के बिना आसानी से एनएसबंडल विधि का उपयोग कर सकते हैं, बस विस्तार के लिए शून्य पास करें।

[[NSBundle mainBundle] pathForResource:@"image.jpg" ofType:nil]; 
+1

के लिए धन्यवाद यह आईएमएचओ को छोड़कर उत्तर दिया जाना चाहिए क्योंकि यह अधिक सुरुचिपूर्ण और बिंदु है। मुझे यकीन नहीं है कि क्यों सेब विस्तार को अलग करने पर जोर देता है। – TalL

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