Hata: CUICatalog: Sağlanan geçersiz varlık adı: (boş) veya geçersiz ölçek faktörü: 2.000000


120
TableViewApplication[1458:70b] CUICatalog: Invalid asset name supplied: (null), or invalid scale factor: 2.000000

Ekran görüntüsü eklendi

TableViewController ile çalışırken bu uyarıyı alıyorum. Bu hata nasıl düzeltilir ve hangi blok etkilenir?


Biraz kod gönderebilir misin?
Patrick Hofman

2
Bu uyarı, resim adı boş bir
dizeyse

Yanıtlar:


242

Bu seferki birisi koymak için çalışıyor beliren niliçinde[UIImage imageNamed:]

İçin sembolik kesme noktası ekle [UIImage imageNamed:]Sembolik kesme noktası örneği

$arg3 == nilSimülatörde $r0 == nilkoşul, 32 bit iPhone'da veya $x2 == nil64 bit iPhone'da koşul ekleyin .

Uygulamanızı çalıştırın ve hata ayıklayıcının nerede duracağını görün.

PS Bunun görüntü adının boş dizge olması durumunda da olduğunu unutmayın. Koşula ekleyerek bunu kontrol edebilirsiniz [(NSString*)$x2 length] == 0.


7
Bu akıllıca bir yaklaşımdır. Görünüşe göre sıfır görüntüm ucumun içinde bir yerde, bu yüzden geçmiyor UIImage imageNamed:, ama yine de bu kesme noktasını saklıyorum.
01'de cbowns

9
$arg3Koşullu kesme noktalarının sözdizimini bilmiyordum . Daha fazlasını nereden öğrenebilirim?
Zev Eisenberg

3
Hep dönen, iş için beni değil anlamak için emin değil error: use of undeclared identifier '$arg3'. Bir şey mi kaçırdım?
Ben

5
Almaya devam ediyorum: 23.1 kesme noktasının koşulunu değerlendiren bir hata nedeniyle durduruldu: "$ r0 == nil" Koşullu ifade çözümlenemedi: hata: '$ r0' belirtilmemiş tanımlayıcı kullanım hatası: İfadeyi
çözümlerken

8
Benim durumumda görüntü adı dizesi boştu, bu nedenle arg3 uzunluğunu kontrol etmek benim için çalıştı. (int)[$arg3 length] == 0
Matthew Korporaal

62

Bu hata (genellikle) bir görüntüyü yüklemeye çalıştığınızda meydana gelir, [UIImage imageNamed:myImage]ancak iOS myImagegerçekten bir olup olmadığından emin değildir NSStringve sonra bu uyarıyı alırsınız.

Bunu kullanarak düzeltebilirsiniz:

[UIImage imageNamed:[NSString stringWithFormat:@"%@", myImage]]

Veya basitçe şunların lengthadını kontrol edebilirsiniz UIImage:

if (myImage && [myImage length]) {

    [UIImage imageNamed:myImage];
}

1
Birinin yaptığım aynı hatayı yapması durumunda, kaldırılacak bir UIButton arka plan resmini güncellemeye çalışıyordum (hiç resim yok) ve bu yüzden UIImage adımı bir dizeden sadece "" olarak değiştirdim, bu da hataya neden oldu. UIImage'ın tamamını ("" adı verilen) kaldırarak ve onu nil ile değiştirerek, hata ortadan kalktı.
Dave G

@DaveG You efendim, bana saatler kazandırdı. Yorum için teşekkürler!
Jeff

22

Hata verdiğiniz ismin olduğundan şikayet ettiğinden (null), bu büyük olasılıkla aramadan kaynaklanmaktadır [UIImage imageNamed:nil]. Ya da daha spesifik olarak, bir değişkeni geçirmek ayarlanmamıştır, bu yüzden eşittir nil. Kullanmak stringWithFormat:hatayı ortadan kaldırsa da, aslında istediğiniz şeyi yapmama ihtimalinin yüksek olduğunu düşünüyorum. nilSağladığınız ad bir değer ise, stringWithFormat kullanılması: sanki çağırıyormuşsunuz gibi, kelimenin tam anlamıyla "(null)" adlı bir görüntüyü aramasına neden olur [UIImage imageNamed:@"(null)"].

Bunun gibi bir şey muhtemelen daha iyi bir seçenektir:

if (name) {
    UIImage *image = [UIImage imageNamed:name];
} else {
    // Do something else
}

Bu kodun neden ilk etapta nil değeriyle çağrıldığını anlamanıza yardımcı olması için, Xcode'da o "Başka bir şey yap" satırında bir kesme noktası ayarlamak isteyebilirsiniz.


1
Aynı sorunu yaşadım ve hata, robotspacer'ın söylediği gibi görüntü adının sıfır olmasıydı.
diegomen

17

Xcode 6.4'te, bu, geçerli bir resim olsa bile, film şeridindeki bir sekme çubuğu öğesi için "Seçilen Resim" kullanıldığında meydana geliyor gibi görünüyor.

görüntü açıklamasını buraya girin

Bu aslında seçilen durum görüntüsünü zaten ayarlamıyor gibi görünüyor, bu nedenle Kullanıcı Tanımlı Çalışma Zamanı Niteliklerinde tanımlanması ve Sekme Çubuğu Öğesinin SelectedImage özniteliğinden kaldırılması gerekiyor.

görüntü açıklamasını buraya girin


1
Bunun için teşekkür ederim! Bu hata / uyarı mesajları beni deli ediyordu! Apple'ın neden IB'deki Sekme Çubuğu Öğesi "Seçili Resim" açılır menüsünden kurtulmadığını veya düzgün çalışması için onu düzeltmediğini anlayamıyorum.
wcochran

4

Benim durumumda, uyarıyı göstermeme neden olan [UIImage imageNamed: @ ""] 'i geçiyordum. Sadece imageNamed'i kullandığınız tüm satırlara kesme noktaları ekleyin ve uyarıyı bulduğunuz satırda hata ayıklayın.


Ben de kullanıyorum [UIImage imageNamed:@""]. Nasıl düzelttin
Julfikar

[aButton setImage: nil forState: UIControlStateNormal]
Hahnemann

Bir kullanarak dışında ifhiçbir geçerli adı uygular ve Varlıklar bir "noimage" imajını içermiyorsa nasıl hiçbir görüntü ekranı, görüntü adı boş dize değilse testine veya varsayılan "noimage" imajını kullanarak?
gitti

2

Bu, bir storyboard birkaç bölüme ayrıldıktan sonra başıma geldi (asıl değişiklik tatildeyken gerçekleşti, bu yüzden tam olarak nasıl yapıldığını bilmiyorum).

Film şeridinin XML'ini inceledikten sonra, daha önce varlıklar kataloğunda "bottomBar" a işaret eden bir resim referansının bunun yerine işaret ettiğini buldum imageView:fFo-1g-jzs:image.

XML dosyasının sonunda, <resources>etiketinin altında <image name="imageView:fFo-1g-jzs:image">büyük bir mutableDatablob içeren etiketi vardı .

Film şeridindeki görüntü referansını sıfırladıktan ve blob'u kaldırdıktan sonra hata ortadan kalktı.


Bu benim için çözdü, bir süredir bu sorunu aramak beni çılgına çevirdi. Kesme noktası schtick benim için çalışmadı.
Moshe Gottlieb

Burada da aynı sorun var, ancak kesme noktası içinde bulunduğu xib'i bulmama yardımcı oldu. Görüntü adı IB'deki Bilinmeyen Görüntü'ydi.
Josh Bernfeld

1

Bu hatayı düzelttim. Sadece [UIImage imageNamed:(NSString*) imageName]işlevin kullanımını kontrol edin . Eğer imageNamebir nil, daha sonra hata oluşur.


1

Geçersiz bir resim adı sağlıyorsunuz, bu nedenle koymadan önce doğrulamanız gerekir, yukarıdaki yöntemlerden herhangi birini kodunuz veya benzeri için mantıklı olanı yapabilirsiniz.

if (iconImageName && [iconImageName length])
{

    [UIImage imageNamed:iconImageName];
}
else
{
     iconImageName.hidden = YES;
}

Umarım yardımcı olur !!!!


0

Hatanın nedeni "imageNamed:" yöntemine bir nil değeri geçirmektir. Bundan kaçınmak için, nil değerini iletmeye çalıştığınızda imageView'unuzu gizleyebilirsiniz. UITableView'da imageViews yeniden kullanılırken şans oluşabilir veya scrollViews'ta olabilir.

Aşağıdaki kontrolle uyarıdan kaçındım:

UIImageView *your_image_view;
NSString *imageName;
if(imageName && imageName.length){
 your_image_view.hidden = NO;
 your_image_view.image = [UIImage imageNamed:imageName];
}
else {
 your_image_view.hidden = YES;
}

0

Resim kullanımı yüklediğimde bu uyarıyı aldım [[UIImage imageNamed:normalStr] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal], daha sonra değiştirdim [UIImage imageNamed:normalStr], uyarı gitti.


0

Bir yaklaşım, [UIImage imageNamed:]kendi uygulamanızı değiştirmek için sınıf yöntemi değiştirmek ve ardından uygulamanızda görüntü adını kontrol etmektir. Aşağıdakilere bakın:

İOS'ta bir sınıf yöntemi nasıl değiştirilir?

Bunu UIImage (Hata Ayıklama) kategorimde uyguladım:

+ (UIImage *)db_imageNamed:(NSString *)imageName {
    if ([imageName length] == 0) {
        NSLog(@"breakpoint here");
    }
    return [self db_imageNamed:imageName];  // not a recursive call here after swizzling
}

Sen de takılmak isteyebilirsin [UIImage imageNamed:inBundle:compatibleWithTraitCollection:].


-1

Belki bunu "görüntüAdı" nın "sıfır" olmadığını onaylamak için kullanabilirsiniz; O zaman bu uyarıyı bırakacaksınız.

 if (imageName) {
    self.imageView.image = [UIImage imageNamed:imageName];
 }
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.