2013-09-22 39 views
7

Tôi muốn phương pháp này kiểm tra xem điều kiện có đúng hay không sau đó đặt nút (nút) cụ thể để có hình ảnh tôi chỉ định. Đây là mã.Phương pháp hình ảnh nút cài đặt

-(void)canAfford:(float) f: (UIButton*)button { 
    if([self playerHas:(f)] == YES) { 
     [button setImage:[UIImage imageNamed:nil] forState:UIControlStateNormal]; 
     [button setImage:[UIImage imageNamed:@"ButtonBGclicked.png"] forState:UIControlStateHighlighted]; 
    } else { 
     [button setImage:[UIImage imageNamed:@"ButtonBG.png"] forState:UIControlStateNormal]; 
     [button setImage:[UIImage imageNamed:nil] forState:UIControlStateHighlighted]; 
    } 
} 

Đây là lỗi tôi nhận được.

2013-09-22 10:35:39.985 Tapple[15663:a0b] CUICatalog: Invalid asset name supplied: , or invalid scale factor: 1.000000 

Trả lời

13

Bạn đang gọi [UIImage imageNamed:@""] hoặc [UIImage imageNamed:nil]. Không có hình ảnh nào khớp với chuỗi trống. Nếu bạn đang cố xóa hình ảnh, hãy chuyển nil thay vì gọi imageNamed:.

Hãy thử điều này (mã cập nhật ban đầu, kết hợp bình luận @ Kyle Fang):

- (void)canAfford:(float) f: (UIButton*)button { 
    if([self playerHas:(f)] == YES) { 
     [button setImage:nil forState:UIControlStateNormal]; 
     [button setImage:[UIImage imageNamed:@"ButtonBGclicked.png"] forState:UIControlStateHighlighted]; 
    } else { 
     [button setImage:[UIImage imageNamed:@"ButtonBG.png"] forState:UIControlStateNormal]; 
     [button setImage:nil forState:UIControlStateHighlighted]; 
    } } 
+0

Lỗi tương tự vẫn xảy ra. –

+2

Tôi nghĩ rằng @bneely có nghĩa là '[nút setImage: nil forState: UIControlStateHighlighted];' –

1

tôi bắt đầu có những lỗi tương tự "CUICatalog: tên nội dung không hợp lệ cung cấp:, hoặc yếu tố quy mô không hợp lệ: 2,000000" sau khi sử dụng danh mục tài sản, mới trong Xcode 5.

Sau khi gỡ lỗi, tôi phát hiện ra nguyên nhân gây ra lỗi đó là chuyển đối số "nil" hoặc chuỗi rỗng @ "" sang phương thức lớp [UIImage imageNamed:]. Thậm chí việc truyền tên tệp không tồn tại trong gói đã không kích hoạt lỗi đó.

Vì vậy, tôi đồng ý với bneely (do đó đã bỏ phiếu của tôi lên) để sửa chữa. Bây giờ nếu bạn đã làm những gì được đề xuất và vẫn gặp lỗi, hãy đảm bảo rằng bạn đã xem mã của mình và có thể đặt điểm ngắt bất cứ nơi nào bạn đang gọi [UIImage imageNamed:] và xem bạn có đang chuyển một số không hoặc một chuỗi trống dưới dạng tranh luận.

FYI, để tạo điểm ngắt, chỉ cần nhấp vào cạnh trái của trình chỉnh sửa mã và thêm điểm ngắt màu xanh lam. Sau đó nhấp chuột phải vào điểm ngắt và chọn "Edit Breakpoint .." từ menu bật lên. Sau đó, trong "Tình trạng" loại hộp một cái gì đó như thế này:

(! ImageFileName || [imageFileName isEqualToString: @ ""])

nơi imageFileName là chuỗi đại diện cho các tập tin hình ảnh mà bạn đang cố gắng tải.

+3

Nếu có ai đó tìm ra cách để chỉnh sửa tình trạng của nhiều điểm ngắt cùng một lúc, hãy cho tôi biết ... Đây là một lỗi khó tìm nguồn gốc nếu bạn có một dự án lớn. – danbretl

1

Tôi thấy rằng nguồn gốc của vấn đề này đối với tôi là mảng mà tôi đã nhận được dữ liệu từ việc xác định hình ảnh, được đánh dấu weak, nonatomic và bị xóa khỏi dưới tôi.

Đặt mảng nguồn dữ liệu là nonatomic, retain khắc phục vấn đề khó nắm bắt này.

0

Chỉ đọc điều này nếu bạn sử dụng IB hoặc bảng phân cảnh!

Tôi gặp sự cố này sau khi tôi đặt hình ảnh cho UIImageView trong bảng phân cảnh và sau đó thay đổi tên hình ảnh đó trong danh mục nội dung. ImageView trong bảng phân cảnh vẫn còn với hình ảnh đó, mặc dù trong thanh tra thuộc tính cho chế độ xem hình ảnh, trường hình ảnh đã nói "Hình ảnh không xác định". Tất cả mọi thứ đã làm việc tốt bởi vì sau này tôi đã thiết lập hình ảnh thông qua mã, ngoại trừ đăng nhập gây phiền nhiễu.

Ugh, có vẻ như lạm dụng từ "hình ảnh", hy vọng nó sẽ giúp ai đó.

5

Cách tốt hơn để sử dụng điểm ngắt để tìm cuộc gọi cụ thể gây ra + [UIImage imagenamed:] để tạo lỗi là sử dụng Điểm dừng biểu tượng.

Mở Trình điều hướng điểm ngắt và nhấp vào nút "+" ở dưới cùng bên trái.Chọn "Thêm điểm dừng biểu tượng ...". Sau đó chỉnh sửa breakpoint để có các thiết lập này:

Ký hiệu: + [UIImage imageNamed:] Tình trạng: $ r2 == nil

Các Điều kiện kiểm tra đăng ký r2, mà chỉ vào tranh cãi với imageNamed: phương pháp, cho một đối số không có giá trị cho phương pháp. Bạn cũng có thể đặt Điều kiện thành (BOOL) [(NSString *) $ r2 isEqualToString: @ ""], nếu bạn muốn xem liệu một chuỗi rỗng có được sử dụng làm đối số hay không. Lưu ý rằng thanh ghi r2 chỉ xuất hiện trong trường hợp gỡ lỗi trên thiết bị. Trình mô phỏng sẽ sử dụng một thanh ghi có tên khác vì nó đang chạy trên kiến ​​trúc x86.

Khi điều kiện được thỏa mãn, trình gỡ lỗi sẽ ngắt trong mã bộ mã hóa của thư viện UIKit, nhưng bạn có thể tìm nguồn gốc của cuộc gọi trong theo dõi ngăn xếp của luồng.

Bạn chỉ cần một điểm ngắt duy nhất để kiểm tra toàn bộ mã nguồn của bạn cho nguồn của cuộc gọi.

1

1) Thêm điểm dừng biểu tượng sau khi nhấn nút dấu cộng. plus sign at the bottom 2) thêm dòng boolean này để kiểm tra chuỗi rỗng boolean line for condition 3) này đã được bổ sung tự động (không chắc chắn sau khi xây dựng hay không) vì vậy tôi chỉnh sửa để thêm điều kiện check for nil

Hy vọng điều này có thể giúp một chút thêm , tôi bao gồm.

Các vấn đề liên quan