TableViewApplication[1458:70b] CUICatalog: Invalid asset name supplied: (null), or invalid scale factor: 2.000000
TableViewController ile çalışırken bu uyarıyı alıyorum. Bu hata nasıl düzeltilir ve hangi blok etkilenir?
TableViewApplication[1458:70b] CUICatalog: Invalid asset name supplied: (null), or invalid scale factor: 2.000000
TableViewController ile çalışırken bu uyarıyı alıyorum. Bu hata nasıl düzeltilir ve hangi blok etkilenir?
Yanıtlar:
Bu seferki birisi koymak için çalışıyor beliren nil
içinde[UIImage imageNamed:]
İçin sembolik kesme noktası ekle [UIImage imageNamed:]
$arg3 == nil
Simülatörde $r0 == nil
koşul, 32 bit iPhone'da veya $x2 == nil
64 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
.
UIImage imageNamed:
, ama yine de bu kesme noktasını saklıyorum.
$arg3
Koşullu kesme noktalarının sözdizimini bilmiyordum . Daha fazlasını nereden öğrenebilirim?
error: use of undeclared identifier '$arg3'
. Bir şey mi kaçırdım?
(int)[$arg3 length] == 0
Bu hata (genellikle) bir görüntüyü yüklemeye çalıştığınızda meydana gelir, [UIImage imageNamed:myImage]
ancak iOS myImage
gerçekten bir olup olmadığından emin değildir NSString
ve sonra bu uyarıyı alırsınız.
Bunu kullanarak düzeltebilirsiniz:
[UIImage imageNamed:[NSString stringWithFormat:@"%@", myImage]]
Veya basitçe şunların length
adını kontrol edebilirsiniz UIImage
:
if (myImage && [myImage length]) {
[UIImage imageNamed:myImage];
}
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. nil
Sağ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.
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.
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.
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.
[UIImage imageNamed:@""]
. Nasıl düzelttin
if
hiç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?
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 mutableData
blob 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ı.
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 !!!!
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;
}
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:]
.
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];
}