2010-10-28 20 views
7

मेरे पास लगभग 60 छवियां हैं जिन्हें मैं कोर डेटा में स्टोर करना चाहता हूं, जिनमें से 30 अवतार हैं और avt_filename_00X.png का उपसर्ग है और उनमें से 30 छोटे हैं और एक अलग उपसर्ग है।उद्देश्य सी में एनएसबंडल से छवि पथ प्राप्त करें?

कोर डेटा/SQLite में बीएलओबी के रूप में सभी छवियों को संग्रहीत करने के बजाय, मैं प्रत्येक छवि के लिए पथ संग्रहीत करना चाहता हूं (उसी तरह आप एक MySQL डेटाबेस के लिए छवि पथ संग्रहीत करेंगे)।

हालांकि मुझे यकीन नहीं है कि एनएसबंडल में मिली छवि के पथ को कैसे पकड़ें।

मैं के माध्यम से NSDocumentDirectory के लिए पथ प्राप्त कर सकते हैं:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 

NSFileManager *fileManager = [NSFileManager defaultManager]; 
[fileManager fileExistsAtPath:documentsDirectory]; 

NSLog(@"documentsDirectory = %@", documentsDirectory); 

और मैं छवि को लोड और एक सरणी में जोड़ सकते हैं।

if (qty == 0) 
{ 
    //NSLog(@"fileToLoad = %@", fileToLoad); 

    UIImage *img = [[UIImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:fileToLoad ofType:fileExt]]; 

    [self.avtList addObject:img]; 

    [img release]; 

} else { 

    // load multiple image into an array 
    // not coded yet 
} 

लेकिन, क्या मैं के अनिश्चित हूँ है:

  1. मैं पथ जहां कंप्यूटर NSBundle अंदर एक बार अपनी छवि को पाया कैसे हड़पने करते हैं?

  2. मैं कैसे सुनिश्चित कर सकता हूं कि ऐप डिवाइस पर होने पर पथ काम करेगा?

विचार एक सरणी में संग्रहीत सभी छवियों को प्राप्त करना होगा और फिर उन्हें बाद में कोर डेटा/SQLite पर धक्का देना होगा।

उत्तर

25

मुख्य बंडल में एक संसाधन का पूर्ण पथ प्राप्त करने के लिए सही तरीका है:

[[NSBundle mainBundle] pathForResource:@"avt_filename_00X" ofType:@"png"] 

(या आप खाली स्ट्रिंग 'ofType' के लिए अगर आप संसाधन में विस्तार शामिल करने के लिए पसंद करते हैं आपूर्ति कर सकते हैं नाम)

लेकिन कहीं भी दस्तावेज़ों में कहीं भी डिवाइस, ऑपरेटिंग सिस्टम पुनरावृत्तियों इत्यादि में रहने की गारंटी नहीं है। यह वर्तमान वातावरण में एप्लिकेशन बंडल से उस फ़ाइल का मार्ग है, जो अवधि के लिए वैध रहने की गारंटी है केवल आवेदन के इस भाग के।

क्योंकि एप्लिकेशन के पथ, और इसलिए इसके संसाधनों के लिए, इसे रहने की गारंटी नहीं है, मुझे लगता है कि इसे किसी भी माध्यम से SQL डेटाबेस में रखना असुरक्षित है।

क्या आप शायद एक ऐसी योजना अपना सकते हैं जिसके द्वारा एक फ़ाइल नाम शुरू हो रहा है/एक पूर्ण पथ है, शुरुआत में बिना किसी एक को बंडल में माना जाता है, जिसका अर्थ है कि आप डेटाबेस के बाहर तर्क लागू कर सकते हैं?

+1

हाँ, यह समझ में आता है। मुझे लगता है कि मैं सिर्फ फाइलनाम को डेटाबेस में संग्रहीत करूंगा और फिर छवि को वापस पकड़ने के लिए बाद में अपने एनएसबंडल कोड का उपयोग करूंगा। – zardon

2

मैं कैसे सुनिश्चित कर सकता हूं कि पथ डिवाइस पर ऐप होने पर काम करेगा?

इसमें रगड़ है: आप नहीं कर सकते। पथों को ऑन-द-फ्लाई पर संभालने के लिए सबसे अच्छा होगा, और शायद इसके बजाय फ़ाइल नामों को स्टोर करें।

+0

ओह मुझे यह नहीं पता था। मैंने सोचा कि आप स्टोर को पूरा पथ स्टोर कर सकते हैं और फिर इसका इस्तेमाल कर सकते हैं। अगर मैं इसे फ़ाइल नाम और फ़ाइलपैथ स्टोर करने के लिए लिखता हूं, तो क्या मुझे यह जांचने की ज़रूरत होगी कि इससे कुछ भी करने से पहले यह अस्तित्व में है? – zardon

+0

बिल्कुल, क्योंकि आपके कंप्यूटर के अलावा कहीं और ठीक से काम करने की संभावना बहुत पतली है।उदाहरण के लिए, यदि कोई उपयोगकर्ता अपने/उपयोगकर्ता/उपयोगकर्ता नाम/एप्लिकेशन फ़ोल्डर में एप्लिकेशन रखता है, तो उपयोगकर्ता नाम में परिवर्तन संग्रहीत पथ को बेकार प्रदान करेगा। –

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