TableViewApplication[1458:70b] CUICatalog: Invalid asset name supplied: (null), or invalid scale factor: 2.000000
Nhận được cảnh báo này khi làm việc với TableViewController. Làm thế nào để khắc phục lỗi này và khối nào bị ảnh hưởng?
TableViewApplication[1458:70b] CUICatalog: Invalid asset name supplied: (null), or invalid scale factor: 2.000000
Nhận được cảnh báo này khi làm việc với TableViewController. Làm thế nào để khắc phục lỗi này và khối nào bị ảnh hưởng?
Câu trả lời:
Cái này xuất hiện khi ai đó đang cố gắng đưa nil
vào[UIImage imageNamed:]
Thêm điểm ngắt biểu tượng cho [UIImage imageNamed:]
Thêm $arg3 == nil
điều kiện trên Trình mô phỏng, $r0 == nil
điều kiện trên iPhone 32 bit hoặc $x2 == nil
trên iPhone 64 bit.
Chạy ứng dụng của bạn và xem trình gỡ lỗi sẽ dừng ở đâu.
PS Hãy nhớ điều này cũng xảy ra nếu tên hình ảnh là chuỗi trống. Bạn có thể kiểm tra điều này bằng cách thêm [(NSString*)$x2 length] == 0
vào điều kiện.
UIImage imageNamed:
, nhưng tôi vẫn đang lưu điểm ngắt này.
$arg3
cú pháp cho các điểm ngắt có điều kiện. Tôi có thể tìm hiểu thêm ở đâu?
error: use of undeclared identifier '$arg3'
. Tôi đã bỏ lỡ điều gì đó?
(int)[$arg3 length] == 0
Lỗi này (thường) xảy ra khi bạn cố gắng tải một hình ảnh bằng [UIImage imageNamed:myImage]
nhưng iOS không chắc chắn myImage
có thực sự là một NSString
hay không và sau đó bạn có cảnh báo này.
Bạn có thể sửa lỗi này bằng cách sử dụng:
[UIImage imageNamed:[NSString stringWithFormat:@"%@", myImage]]
Hoặc bạn có thể chỉ cần kiểm tra length
tên của UIImage
:
if (myImage && [myImage length]) {
[UIImage imageNamed:myImage];
}
Vì lỗi đang phàn nàn rằng tên bạn đã cung cấp (null)
, điều này rất có thể là do cách gọi [UIImage imageNamed:nil]
. Hay cụ thể hơn, việc chuyển vào một biến chưa được đặt, vì vậy nó bằng nil
. Trong khi sử dụng stringWithFormat:
sẽ loại bỏ được lỗi, tôi nghĩ rằng có nhiều khả năng nó không thực sự làm những gì bạn muốn. Nếu tên bạn cung cấp là một nil
giá trị, thì việc sử dụng stringWithFormat: sẽ dẫn đến việc nó tìm kiếm một hình ảnh có tên theo nghĩa đen là "(null)", như thể bạn đang gọi [UIImage imageNamed:@"(null)"]
.
Một cái gì đó như thế này có lẽ là một lựa chọn tốt hơn:
if (name) {
UIImage *image = [UIImage imageNamed:name];
} else {
// Do something else
}
Bạn có thể muốn đặt một điểm ngắt trong Xcode trên dòng "Làm việc khác", để giúp bạn tìm ra lý do tại sao mã này được gọi với giá trị nil ngay từ đầu.
Trong Xcode 6.4, điều này dường như xảy ra khi sử dụng "Hình ảnh đã Chọn" cho một mục trên thanh tab trong bảng phân cảnh, ngay cả khi đó là hình ảnh hợp lệ.
Điều này dường như không thực sự đặt hình ảnh trạng thái đã chọn, vì vậy nó cần được xác định trong Thuộc tính thời gian chạy do người dùng xác định và bị xóa khỏi thuộc tính SelectedImage của Mục thanh tab
Trong trường hợp của tôi, tôi đã chuyển [UIImage imageNamed: @ ""], điều này khiến tôi hiển thị cảnh báo. Chỉ cần thêm các điểm ngắt vào tất cả các dòng mà bạn đã sử dụng imageNamed và gỡ lỗi dòng nơi bạn tìm thấy cảnh báo.
[UIImage imageNamed:@""]
. Làm thế nào bạn sửa chữa nó?
if
để kiểm tra xem tên hình ảnh có phải là một chuỗi trống hay không hoặc sử dụng hình ảnh "noImage" mặc định, làm cách nào để bạn không hiển thị hình ảnh khi không có tên phù hợp áp dụng và Nội dung không chứa hình ảnh "noImage"?
Điều này xảy ra với tôi sau khi một bảng phân cảnh được chia thành nhiều thứ (sự thay đổi thực tế xảy ra khi tôi đang đi nghỉ, vì vậy tôi không biết chính xác nó được thực hiện như thế nào).
Sau khi kiểm tra XML của các bảng phân cảnh, tôi nhận thấy rằng một tham chiếu hình ảnh trước đây đã trỏ đến "bottomBar" trong danh mục nội dung thay vì trỏ tới imageView:fFo-1g-jzs:image
.
Ở cuối tệp XML bên dưới <resources>
thẻ có tên là thẻ <image name="imageView:fFo-1g-jzs:image">
chứa một mutableData
đốm màu lớn .
Sau khi đặt lại tham chiếu hình ảnh trong bảng phân cảnh và xóa đốm màu, lỗi đã biến mất.
Bạn đang cung cấp một số tên hình ảnh không hợp lệ, vì vậy cần xác thực trước khi đặt nó, bạn có thể thực hiện bất kỳ cách nào ở trên tùy theo cách nào phù hợp với mã của bạn hoặc thích
if (iconImageName && [iconImageName length])
{
[UIImage imageNamed:iconImageName];
}
else
{
iconImageName.hidden = YES;
}
Hy vọng nó sẽ giúp ích !!!!
Lý do gây ra lỗi là truyền giá trị nil cho phương thức "imageNamed:". Để tránh điều này, bạn có thể ẩn imageView của mình khi bạn cố gắng chuyển giá trị nil. Cơ hội có thể xảy ra khi sử dụng lại các imageView trong UITableView hoặc có thể trong scrollViews.
Tôi đã tránh được cảnh báo bằng cách kiểm tra dưới đây:
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;
}
Một cách tiếp cận là làm thay đổi phương thức lớp để thay thế [UIImage imageNamed:]
bằng cách triển khai của riêng bạn, sau đó kiểm tra tên hình ảnh trong phần triển khai của bạn. Xem phần sau:
Làm cách nào để thay đổi phương thức lớp trên iOS?
Tôi đã triển khai điều này trong danh mục UIImage (Gỡ lỗi) của mình:
+ (UIImage *)db_imageNamed:(NSString *)imageName {
if ([imageName length] == 0) {
NSLog(@"breakpoint here");
}
return [self db_imageNamed:imageName]; // not a recursive call here after swizzling
}
Bạn cũng có thể muốn quay cuồng [UIImage imageNamed:inBundle:compatibleWithTraitCollection:]
.
Có thể bạn có thể sử dụng điều này để xác nhận "imageName" không phải là "nil"; Sau đó, bạn sẽ bỏ qua cảnh báo này.
if (imageName) {
self.imageView.image = [UIImage imageNamed:imageName];
}