2014-10-31 20 views
8

Trong ứng dụng của tôi, tôi đang kiểm tra xem một bài đăng có ảnh hay không.Bất ngờ tìm thấy nil trong khi mở khóa giá trị tùy chọn

Đối với điều này tôi đang sử dụng:

if pictures[string]? != nil { 
    if var image: NSData? = pictures[string]? { 
     imageView.image = UIImage(data: image!) 
    } 
} 

Tuy nhiên, nó vẫn đi lên với các lỗi:

fatal error: unexpectedly found nil while unwrapping an Optional value.

Tôi chắc chắn rằng nó là một cái gì đó dễ dàng để sửa chữa nhưng tôi khá mới để điều này - tôi đang làm gì sai?

+0

Có thể trùng lặp o f [Lỗi "gây tử vong gì: bất ngờ tìm thấy nil trong khi mở một giá trị Tùy chọn" có nghĩa là?] (http://stackoverflow.com/questions/32170456/what-does-fatal-error-unexpectedly-found-nil-while-unwrapping -an-optional-valu) – Hamish

Trả lời

14

Hãy thử làm theo cách này:

if let imageData = pictures[string] { 
    if let image = UIImage(data: imageData) { 
     imageView.image = image 
    } 
} 

Giả sử rằng string là chìa khóa hợp lệ.

Bạn đang xử lý các tùy chọn, vì vậy hãy bỏ qua từng đối tượng trả về một cách có điều kiện trước khi sử dụng nó.

Mở khóa cưỡng bức là nguy hiểm và chỉ nên được sử dụng khi bạn là hoàn toàn đảm bảo rằng tùy chọn chứa giá trị. ImageData của bạn có thể không đúng định dạng để tạo hình ảnh, nhưng bạn vẫn buộc phải mở nó ra. Điều này là không thể làm trong Objective-C vì nó chỉ có nghĩa là nil các đối tượng được truyền xung quanh. Swift không phải là quá khoan dung.

+0

Cảm ơn :) Làm việc ngay! –

1

Nó là vấn đề nhanh chóng khi bạn quên quấn giá trị tùy chọn

Thay thế dòng imageView.image = UIImage(data: image!) với imageView?.image = UIImage(data: image!)

0

tôi phải đối mặt với cùng một vấn đề với mã này

if(!placeholderColor.isEqual(nil)) 
{ 
    self.attributedPlaceholder = NSAttributedString(string: self.placeholder!, attributes: [NSForegroundColorAttributeName : placeholderColor]) 
} 

và giải quyết bằng cách này

if let placeColor = placeholderColor 
{ 
    self.attributedPlaceholder = NSAttributedString(string: self.placeholder!, attributes: [NSForegroundColorAttributeName : placeColor]) 
} 
Các vấn đề liên quan