2010-06-10 10 views
5

Tôi có một mảng của NSString s:Cách tìm hiểu xem một hình ảnh có tồn tại trong một gói không?

Flower 
Car 
Tree 
Cat 
Shoe 

Một số các chuỗi có hình ảnh gắn liền với họ; một số thì không. Tôi có thể tạo tên hình ảnh bằng cách thêm .png vào tên (ví dụ: Flower.png).

Làm cách nào để kiểm tra xem hình ảnh đó có thực sự tồn tại trong gói trước khi tôi cố gắng tải hình ảnh đó vào chế độ xem không?

Trả lời

19

này cũng nên làm việc, và là một chút ngắn hơn:

if (flowerImage = [UIImage imageNamed:@"Flower.png"]) 
{ 
    ... // do something here 
} 
else 
{ 
    ... // image does not exist 
} 

Phương pháp imageNamed: sẽ tìm trong chính bạn bó cho tệp png.

+0

Đó là ước tốt để sử dụng isEqual : khi kiểm tra xem hai đối tượng có bằng nhau hay không. Bạn cũng có thể sử dụng == nhưng tôi sẽ không khuyên bạn nên như trong một số trường hợp nó sẽ không trả lại kết quả mong đợi (đôi khi khi so sánh các đối tượng và các tham số của chúng). Mã hiện tại cũng sai khi bạn chỉ định hình ảnh hoa thay vì kiểm tra xem nó có bằng png hình hay không. Sao chép mã này sẽ ném ra một lỗi mà thêm isEqual: hoặc == sẽ sửa chữa. –

+0

Tính năng này hoạt động nhưng thông báo cảnh báo trên iOS xuất hiện cho biết không thể tìm thấy hình ảnh. – Herno

5

Chỉ cần tải các tài nguyên và kiểm tra xem nó là nil hay không:

NSString* myImagePath = [[NSBundle mainBundle] pathForResource:@"MyImage" ofType:@"jpg"]; 
if (myImagePath != nil) { 
    // Do something with image... 
} 
3

tôi sẽ gán một hình như là một biến, sau đó bạn có thể kiểm tra xem hình ảnh tồn tại:

UIImage * flowerImage = [UIImage imageNamed:@"Flower.png"]; 

if (flowerImage) { 
    // Do something 
} 
else { 
    // Do something else 
} 

Trong câu trả lời được chấp nhận, chúng tôi đang kiểm tra để xem nếu hình ảnh bằng một hình ảnh với một tên cụ thể. Điều này có thể đi sai như chúng ta sẽ trở lại không nếu

  • Hình ảnh Flower.png không tồn tại

  • Hình ảnh Flower.png không tồn tại nhưng flowerImage được thiết lập để một hình ảnh khác có nghĩa là chúng không bằng nhau

Chỉ định biến cho hình ảnh và sau đó kiểm tra xem biến có được gán hay không trở lại cho chúng ta một vâng nhất định hoặc không tùy thuộc vào việc Flower.png tồn tại

+1

Điểm chấm 2 không đúng. Toán tử gán trong câu lệnh if có chính xác cùng một hiệu ứng như một phép gán trước câu lệnh if. Mã này tương đương với mã trả lời được chấp nhận. – Ephemera

+0

Ok. Nhưng câu trả lời của tôi đang chạy dưới giả định rằng câu trả lời được chấp nhận sẽ bị lỗi. Nếu == được thay thế thay vì = thì nếu Flower.png không tồn tại hoặc nếu nó khác với flowerImage thì chúng ta sẽ nhận được hình ảnh không tồn tại. Có lẽ câu trả lời được chấp nhận nên có: ((flowerImage = [UIImage imageNamed: @ "Flower.png"])) vì điều này cũng gán cho nó (http://stackoverflow.com/questions/3323257/double-parentheses-in-sample- mã). Trong trường hợp này, bạn đúng rằng hai điểm sẽ không phải là một yếu tố. Không cần chỉnh sửa, nó sẽ bị lỗi. –

+0

Sử dụng '=' bên trong một điều kiện nếu chỉ ném một cảnh báo, và tôi không nghĩ rằng nó thậm chí còn làm điều đó nữa (ít nhất là không có trong Xcode, bạn có thể thiết lập một cờ trình biên dịch cho nó mặc dù). Trong mọi trường hợp, đây là một trong 10% khác mà câu trả lời được chấp nhận cho câu hỏi đó nói về. Kết quả của biểu thức gán là phía bên trái của biểu thức (giá trị lvalue - 'flowerImage' trong trường hợp này). Nếu đó là số không (tức là -imageNamed: trả về nil) thì điều kiện if sẽ là false. Nếu không nó sẽ là sự thật. – Ephemera

0

Tôi thậm chí không thêm ".png" vào tên tập tin và nó hoạt động:

NSArray *images = @[@"Flower", @"Car", @"Tree", @"Cat", @"Shoe"]; 

if ([UIImage imageNamed:images[0]]){ 
     // there is a flower image 
    } else { 
     // no flowers for you 
    } 
}