2010-06-10 19 views
5

मैं NSString रों की एक सरणी है:यह पता लगाने के लिए कि कोई छवि बंडल के भीतर मौजूद है या नहीं?

Flower 
Car 
Tree 
Cat 
Shoe 

इन तार में से कुछ उनके साथ जुड़े छवियों है; कुछ नहीं करते हैं। मैं नाम पर .png जोड़कर एक छवि नाम बना सकता हूं (उदा। Flower.png)।

मैं यह कैसे जांचूं कि यह दृश्य वास्तव में बंडल के भीतर मौजूद है या नहीं, इससे पहले कि मैं इसे दृश्य में लोड करने का प्रयास करूं?

उत्तर

19

यह भी काम करना चाहिए, और थोड़ा कम है:

if (flowerImage = [UIImage imageNamed:@"Flower.png"]) 
{ 
    ... // do something here 
} 
else 
{ 
    ... // image does not exist 
} 

imageNamed: विधि अपने मुख्य में दिखेगा पीएनजी फ़ाइल के लिए बंडल।

+0

यह isEqual उपयोग करने के लिए अच्छा सम्मेलन है : जांच करते समय कि दो वस्तुएं बराबर हैं या नहीं। आप == का भी उपयोग कर सकते हैं लेकिन मैं कुछ स्थितियों में अनुशंसा नहीं करता हूं कि यह अपेक्षित परिणाम नहीं लौटाएगा (कभी-कभी ऑब्जेक्ट्स और उनके पैरामीटर की तुलना करते समय)। वर्तमान कोड भी गलत है क्योंकि आप यह जांचने के बजाय फूल छवि निर्दिष्ट कर रहे हैं कि यह छवि पीएनजी के बराबर है या नहीं। इस कोड को कॉपी करने से एक त्रुटि फेंक जाएगी जो इक्वेल जोड़ती है: या == ठीक हो जाएगी। –

+0

यह काम करता है लेकिन एक आईओएस चेतावनी संदेश कहता है कि एक छवि नहीं मिली। – Herno

5

बस संसाधन लोड और जाँच करें कि क्या है यह nil या नहीं:

NSString* myImagePath = [[NSBundle mainBundle] pathForResource:@"MyImage" ofType:@"jpg"]; 
if (myImagePath != nil) { 
    // Do something with image... 
} 
3

मैं एक चर के रूप में छवि आवंटित होता है, तो आप देख सकते हैं कि छवि मौजूद है:

UIImage * flowerImage = [UIImage imageNamed:@"Flower.png"]; 

if (flowerImage) { 
    // Do something 
} 
else { 
    // Do something else 
} 

स्वीकार किए जाते हैं जवाब हम अगर चित्र एक विशिष्ट नाम के साथ एक छवि के बराबर होती है देखने के लिए जाँच कर रहे हैं में। यह गलत के रूप में हम कोई वापस आ जाएगी सकता है अगर

  • छवि Flower.png

और

  • छवि Flower.png मौजूद है मौजूद नहीं है लेकिन flowerImage पर सेट है एक अलग छवि जिसका अर्थ है कि वे बराबर नहीं हैं

छवि में एक वैरिएबल असाइन करना और फिर जांच करना कि चर निर्दिष्ट किया गया है या नहीं हमें वापसी एक निश्चित हाँ या पर कि क्या Flower.png मौजूद

+1

डॉट पॉइंट 2 सत्य नहीं है। अगर कथन में असाइनमेंट ऑपरेटर के पास बयान से पहले असाइनमेंट के समान प्रभाव होता है। कोड स्वीकार्य उत्तर कोड के बराबर है। – Ephemera

+0

ठीक है। लेकिन मेरा जवाब इस धारणा के तहत चल रहा है कि स्वीकृत उत्तर त्रुटि होगी। यदि == को बदले में प्रतिस्थापित किया गया है = तो यदि Flower.png मौजूद नहीं है या यदि यह फूल के लिए अलग है तो छवि हम पाएंगे कि छवि मौजूद नहीं है। हो सकता है कि स्वीकृत उत्तर में होना चाहिए: ((फूल छवि = [UIImage imageNamed: @ "Flower.png"])) क्योंकि यह भी इसे असाइन करता है (http://stackoverflow.com/questions/3323257/double-parentheses-in- नमूना- कोड)। इस मामले में आप सही हैं कि दो बिंदु एक कारक नहीं होगा। हालांकि संपादन के बिना, यह त्रुटि होगी। –

+0

किसी स्थिति के अंदर '=' का उपयोग केवल एक चेतावनी फेंकता है, और मुझे नहीं लगता कि यह अब भी करता है (कम से कम एक्सकोड में नहीं, आप इसके लिए एक कंपाइलर ध्वज सेट कर सकते हैं)। किसी भी मामले में, यह उस अन्य 10% में से एक है कि उस प्रश्न के स्वीकृत उत्तर के बारे में बात करते हैं। एक असाइनमेंट अभिव्यक्ति का परिणाम अभिव्यक्ति के बाईं ओर है (इस मामले में lvalue - 'flowerImage')। यदि वह शून्य है (यानी-imageNamed: शून्य वापस लौटा) तो अगर स्थिति गलत होगी। अन्यथा यह सच होगा। – Ephemera

0

मैं भी फ़ाइल नाम में ".png" जोड़ नहीं है निर्भर करता है कोई और काम करता है:

NSArray *images = @[@"Flower", @"Car", @"Tree", @"Cat", @"Shoe"]; 

if ([UIImage imageNamed:images[0]]){ 
     // there is a flower image 
    } else { 
     // no flowers for you 
    } 
} 
संबंधित मुद्दे

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