Error: CUICatalog: Nama aset yang diberikan tidak valid: (null), atau faktor skala tidak valid: 2.000000


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

Tangkapan layar ditambahkan

Mendapatkan peringatan ini saat bekerja dengan TableViewController. Bagaimana cara memperbaiki kesalahan ini dan blok mana yang terpengaruh?


Bisakah Anda memposting beberapa kode?
Patrick Hofman

2
Peringatan ini juga muncul jika nama gambar adalah string kosong
onmyway133

Jawaban:


242

Satu ini muncul ketika seseorang mencoba untuk menempatkan nildi[UIImage imageNamed:]

Tambahkan breakpoint simbolis untuk [UIImage imageNamed:]Contoh titik putus simbolis

Tambahkan $arg3 == nilketentuan di Simulator, $r0 == nilketentuan di iPhone 32-bit, atau $x2 == nildi iPhone 64-bit.

Jalankan aplikasi Anda dan lihat di mana debugger akan berhenti.

PS Perlu diingat ini juga terjadi jika nama gambar adalah string kosong. Anda dapat memeriksanya dengan menambahkan [(NSString*)$x2 length] == 0ke ketentuan.


7
Ini adalah pendekatan yang cerdas. Sepertinya gambar nihil saya ada di suatu tempat di ujung pena saya, jadi tidak melalui UIImage imageNamed:, tapi saya tetap menyimpan breakpoint ini.
cbowns

9
Saya tidak tahu tentang $arg3sintaks untuk breakpoint bersyarat. Dimana saya bisa belajar lebih banyak?
Zev Eisenberg

3
Tidak yakin untuk mengerti mengapa itu tidak berhasil untuk saya, selalu kembali error: use of undeclared identifier '$arg3'. Apakah saya melewatkan sesuatu?
Ben

5
saya terus mendapatkan: Dihentikan karena kesalahan mengevaluasi kondisi breakpoint 23.1: "$ r0 == nil" Tidak dapat mengurai ekspresi bersyarat: error: penggunaan pengenal yang tidak dideklarasikan '$ r0' error: 1 ekspresi parsing error
Pranoy C

8
Dalam kasus saya, string nama gambar kosong, jadi memeriksa panjang arg3 berhasil untuk saya. (int)[$arg3 length] == 0
Matthew Korporaal

62

Kesalahan ini (biasanya) terjadi ketika Anda mencoba memuat gambar [UIImage imageNamed:myImage]tetapi iOS tidak yakin apakah myImagebenar-benar a NSStringdan kemudian Anda memiliki peringatan ini.

Anda dapat memperbaikinya menggunakan:

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

Atau Anda cukup memeriksa lengthnama dari UIImage:

if (myImage && [myImage length]) {

    [UIImage imageNamed:myImage];
}

1
Jika ada yang melakukan kesalahan yang sama dengan yang saya lakukan, saya mencoba memperbarui gambar latar belakang UIButton untuk dihapus (tidak ada gambar sama sekali) dan saya mengubah nama UIImage saya dari string menjadi "", yang menyebabkan kesalahan. Dengan menghapus seluruh UIImage (bernama: "") dan menggantinya dengan nihil, kesalahan tersebut menghilang.
Dave G

@DaveG Anda Pak, hemat saya berjam-jam. Terima kasih atas komentarnya!
Jeff

22

Karena kesalahan mengeluh bahwa nama yang Anda berikan adalah (null), kemungkinan besar ini disebabkan oleh panggilan [UIImage imageNamed:nil]. Atau lebih khusus lagi, meneruskan variabel belum ditetapkan, jadi itu sama dengan nil. Saat menggunakan stringWithFormat:akan menghilangkan kesalahan, saya pikir ada kemungkinan bagus itu tidak benar-benar melakukan apa yang Anda inginkan. Jika nama yang Anda berikan adalah sebuah nilnilai, maka menggunakan stringWithFormat: akan membuatnya mencari gambar yang secara harfiah bernama "(null)", seolah-olah Anda memanggil [UIImage imageNamed:@"(null)"].

Sesuatu seperti ini mungkin merupakan pilihan yang lebih baik:

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

Anda mungkin ingin menyetel breakpoint di Xcode pada baris "Lakukan sesuatu yang lain", untuk membantu Anda mengetahui mengapa kode ini dipanggil dengan nilai nol di tempat pertama.


1
Saya mendapat masalah yang sama dan kesalahannya adalah bahwa nama gambar itu nihil seperti yang dikatakan robotspacer.
diegomen

17

Di Xcode 6.4, ini tampaknya terjadi saat menggunakan "Gambar yang Dipilih" untuk item tab bar di storyboard, meskipun itu gambar yang valid.

masukkan deskripsi gambar di sini

Ini tampaknya tidak mengatur gambar status yang dipilih, jadi itu perlu didefinisikan di Atribut Waktu Proses yang Ditentukan Pengguna, dan dihapus dari atribut SelectedImage dari Item Tab Bar

masukkan deskripsi gambar di sini


1
Terima kasih untuk itu! Pesan kesalahan / peringatan ini membuat saya gila! Saya tidak tahu mengapa Apple tidak menghapus item Tab Bar tarik-turun "Gambar yang Dipilih" di IB atau memperbaikinya sehingga berfungsi dengan benar.
wcochran

4

Dalam kasus saya, saya melewati [UIImage imageNamed: @ ""] yang menyebabkan saya menampilkan peringatan. Cukup tambahkan breakpoint ke semua baris tempat Anda telah menggunakan imageNamed dan debug baris tempat Anda menemukan peringatan.


Saya juga menggunakan [UIImage imageNamed:@""]. Bagaimana Anda memperbaikinya?
Julfikar

[aButton setImage: nihil forState: UIControlStateNormal]
Hahnemann

Selain menggunakan ifto untuk menguji apakah nama gambar bukan string kosong, atau menggunakan gambar "noImage" default, bagaimana Anda tidak menampilkan gambar saat tidak ada nama yang berlaku dan Aset tidak berisi gambar "noImage"?
pergi

2

Ini terjadi pada saya setelah papan cerita dipecah menjadi beberapa (perubahan sebenarnya terjadi ketika saya sedang liburan, jadi saya tidak tahu persis bagaimana hal itu dilakukan).

Setelah memeriksa XML storyboard, saya menemukan bahwa referensi gambar yang sebelumnya menunjuk ke "bottomBar" di katalog aset malah menunjuk ke imageView:fFo-1g-jzs:image .

Di akhir file XML di bawah <resources>tag itu diberi nama tag yang <image name="imageView:fFo-1g-jzs:image">mengandung filemutableData gumpalan .

Setelah menyetel ulang referensi gambar di storyboard dan menghapus blob, kesalahan tersebut hilang.


Ini memecahkannya untuk saya, telah mencari masalah ini untuk sementara waktu sekarang, itu membuat saya gila. Schtick breakpoint tidak bekerja untuk saya.
Moshe Gottlieb

Masalah yang sama di sini, tetapi breakpoint membantu saya menemukan xib di dalamnya. Nama gambarnya adalah Gambar Tidak Dikenal di IB.
Josh Bernfeld

1

Saya baru saja memperbaiki kesalahan ini. Cukup periksa penggunaan [UIImage imageNamed:(NSString*) imageName]fungsinya. Jika imageNameadalah nil, kesalahan maka terjadi.


1

Anda memberikan beberapa nama gambar yang tidak valid, jadi perlu memvalidasi sebelum meletakkannya, Anda dapat melakukan salah satu cara di atas mana saja yang masuk akal untuk kode Anda atau sejenisnya

if (iconImageName && [iconImageName length])
{

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

Semoga bisa membantu !!!!


0

Alasan kesalahan ini adalah mengirimkan nilai nihil ke metode "imageNamed:". Untuk menghindarinya, Anda bisa menyembunyikan imageView saat mencoba meneruskan nilai nil. Kemungkinannya bisa terjadi saat menggunakan kembali imageView di UITableView atau mungkin di scrollView.

Saya menghindari peringatan dengan cek di bawah ini:

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

Saya mendapat peringatan ini ketika saya memuat penggunaan gambar [[UIImage imageNamed:normalStr] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal], daripada, saya ubah ke [UIImage imageNamed:normalStr], peringatan hilang.


0

Salah satu pendekatannya adalah melakukan class method swizzling untuk diganti [UIImage imageNamed:]dengan implementasi Anda sendiri, kemudian periksa nama image dalam implementasi Anda. Lihat berikut ini:

Bagaimana cara menipu metode kelas di iOS?

Saya menerapkan ini dalam kategori UIImage (Debug) saya:

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

Anda mungkin ingin tertipu [UIImage imageNamed:inBundle:compatibleWithTraitCollection:]juga.


-1

Mungkin Anda dapat menggunakan ini untuk mengonfirmasi "imageName" bukan "nil"; Kemudian Anda akan mengabaikan peringatan ini.

 if (imageName) {
    self.imageView.image = [UIImage imageNamed:imageName];
 }
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.