2010-06-10 17 views
5

Ben NSString s dizisi var:Bir resmin paket içinde olup olmadığını nasıl öğrenebilirim?

Flower 
Car 
Tree 
Cat 
Shoe 

bu dizeleri bazıları bunlarla ilişkili görüntüler var; Bazıları yok. Adına .png ekleyerek bir görüntü adı oluşturabilirim (ör. Flower.png).

Görüntüye yüklemeyi denemeden önce görüntünün paket içinde olup olmadığını nasıl kontrol ederim?

cevap

19

Bu aynı zamanda çalışmalı, ve biraz daha kısa:

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

imageNamed: yöntem ana görüneceğini png dosyası için paket.

+0

O IsEqual kullanmak için iyi kongre olduğunu : İki nesnenin eşit olup olmadığını kontrol ederken. == kullanabilirsiniz, ancak belirli durumlarda olduğu gibi tavsiye etmeyeceğim, beklenen sonuçları vermeyecektir (bazen nesneleri ve parametrelerini karşılaştırırken). Geçerli kod, görüntü png'ye eşit olup olmadığını kontrol etmek yerine çiçek görüntüsü atadığınız için de yanlıştır. Bu kodu kopyalamak, isEqual ekleyen bir hata oluşturur: veya == düzeltilecek. –

+0

Bu çalışır, ancak bir görüntünün bulunamadığını belirten bir iOS uyarı mesajı görünür. – Herno

5

Sadece kaynak yüklenmeye ve nil ya da değil o olup olmadığını kontrol edin:

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

Ben görüntü varsa o zaman kontrol edebilirsiniz, bir değişken olarak görüntü atamak olacaktır:

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

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

biz resim belirli bir adla resim eşittir olmadığını görmek için kontrol ediyoruz kabul cevap olarak. hiçbir dönecektir gibi resim Flower.png

VE

  • Flower.png mevcut mu görüntü yok ama flowerImage olarak ayarlanır

    • bu yanlış gidebileceğini Farklı bir resim farklı değil Anlamı

    Görüntüye bir değişken atama ve sonra değişkenin atanıp atanmadığını kontrol etme Kesin bir evet ya da Flower.png Hatta dosya adına ".png" katmayan

+1

Nokta noktası 2 doğru değil. If ifadesindeki atama operatörü if ifadesinden önce bir atama ile tam olarak aynı etkiye sahiptir. Kod kabul edilen cevap koduna eşdeğerdir. – Ephemera

+0

Tamam. Ama cevabım kabul edilen cevabın hata yapacağı varsayımı altında çalışıyor. == yerine = = ikame edilirse o zaman Flower.png yoksa veya flowerImage'den farklıysa, o zaman görüntüyü elde edemeyiz. Belki de kabul edilen cevabın sahip olması gerekir: ((flowerImage = [UIImage imageNamed: @ "Flower.png"])), bu da bunu atar (http://stackoverflow.com/questions/3323257/double-parentheses-in-sample- kodu). Bu durumda, iki noktanın bir faktör olmayacağı konusunda haklısınız. Düzenleme olmadan, hata verecektir. –

+0

İçinde '=' ifadesi kullanılıyorsa, sadece bir uyarı atıyor ve bunu artık yapmıyor sanmıyorum (en azından Xcode'ta değil, bunun için bir derleyici bayrağı ayarlayabilirdiniz). Her halükarda, bu diğer% 10'lardan biri, bu soruya verilen cevabın konuştuğudır. Atama ifadesinin sonucu, ifadenin sol tarafıdır (bu durumda lvalue - 'flowerImage'). Eğer bu nil ise (yani -imageNamed: nil döndürülürse), eğer bu durum yanlışsa. Aksi takdirde doğru olacaktır. – Ephemera

0

bulunup bulunmadığına bağlı olarak hiçbir dönüp çalışır:

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

if ([UIImage imageNamed:images[0]]){ 
     // there is a flower image 
    } else { 
     // no flowers for you 
    } 
} 
İlgili konular