Lỗi: CUICatalog: Tên nội dung được cung cấp không hợp lệ: (null) hoặc hệ số tỷ lệ không hợp lệ: 2,000000


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

Đã thêm ảnh chụp màn hình

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?


Bạn có thể đăng một số mã không?
Patrick Hofman

2
Cảnh báo này cũng xuất hiện nếu tên hình ảnh là chuỗi trống
onmyway133

Câu trả lời:


242

Cái này xuất hiện khi ai đó đang cố gắng đưa nilvào[UIImage imageNamed:]

Thêm điểm ngắt biểu tượng cho [UIImage imageNamed:]Ví dụ về điểm ngắt tượng trưng

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 == niltrê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] == 0vào điều kiện.


7
Đây là một cách tiếp cận thông minh. Có vẻ như hình ảnh nil của tôi ở đâu đó trong nib của tôi, vì vậy nó sẽ không đi qua UIImage imageNamed:, nhưng tôi vẫn đang lưu điểm ngắt này.
cbowns

9
Tôi không biết về $arg3cú 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?
Zev Eisenberg

3
Không chắc chắn để hiểu tại sao nó không làm việc cho tôi, luôn luôn quay trở lại error: use of undeclared identifier '$arg3'. Tôi đã bỏ lỡ điều gì đó?
Ben

5
tôi tiếp tục nhận được: Đã dừng do lỗi đánh giá điều kiện của điểm ngắt 23.1: "$ r0 == nil" Không thể phân tích cú pháp biểu thức điều kiện: error: sử dụng mã định danh chưa khai báo '$ r0' error: 1 lỗi phân tích cú pháp biểu thức
Pranoy C

8
Trong trường hợp của tôi, chuỗi tên hình ảnh trống, vì vậy việc kiểm tra độ dài arg3 đã làm việc cho tôi. (int)[$arg3 length] == 0
Matthew Korporaal

62

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 myImagecó thực sự là một NSStringhay 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 lengthtên của UIImage:

if (myImage && [myImage length]) {

    [UIImage imageNamed:myImage];
}

1
Trong trường hợp có ai đó mắc phải lỗi tương tự như tôi đã làm, tôi đang cố gắng cập nhật hình nền của UIButton sẽ bị xóa (không có hình ảnh nào cả) và vì vậy tôi đã thay đổi tên Hình ảnh của mình từ một chuỗi thành chỉ "", điều này gây ra lỗi. Bằng cách xóa toàn bộ UIImage (có tên: "") và thay thế nó bằng nil, lỗi đã biến mất.
Dave G

@DaveG Bạn ạ, đã tiết kiệm cho tôi nhiều giờ. Cảm ơn bạn đã bình luận!
Jeff

22

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 nilgiá 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.


1
Tôi gặp vấn đề tương tự và lỗi là tên hình ảnh không như robotspacer nói.
diegomen

17

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ệ.

nhập mô tả hình ảnh ở đây

Đ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

nhập mô tả hình ảnh ở đây


1
Cảm ơn vì điều đó! Những thông báo lỗi / cảnh báo này đã khiến tôi phát điên! Tôi không thể tìm ra lý do tại sao Apple không loại bỏ thanh tab Mục "Hình ảnh đã chọn" trong IB hoặc sửa nó để nó hoạt động chính xác.
wcochran

4

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.


Tôi cũng đang sử dụng [UIImage imageNamed:@""]. Làm thế nào bạn sửa chữa nó?
Julfikar,

[aButton setImage: nil forState: UIControlStateNormal]
Hahnemann

Ngoài việc sử dụng một 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

2

Đ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.


Điều này đã giải quyết nó cho tôi, đã tìm kiếm vấn đề này trong một thời gian, nó khiến tôi phát điên. Schtick điểm ngắt không hoạt động đối với tôi.
Moshe Gottlieb

Vấn đề tương tự ở đây, nhưng điểm ngắt đã giúp tôi tìm thấy xib của nó. Tên hình ảnh là Hình ảnh không xác định trong IB.
Josh Bernfeld

1

Tôi vừa sửa lỗi này. Chỉ cần kiểm tra việc sử dụng [UIImage imageNamed:(NSString*) imageName]chức năng. Nếu imageNamenil, sau đó lỗi xảy ra.


1

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 !!!!


0

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;
}

0

Tôi nhận được cảnh báo này khi tải sử dụng hình ảnh [[UIImage imageNamed:normalStr] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal], hơn là tôi đổi thành [UIImage imageNamed:normalStr], cảnh báo đã biến mất.


0

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:].


-1

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];
 }
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.