URLを使って画像を表示する方法は?
というエラーが出ています: "致命的なエラー:Optional値のアンラップ中に予期せずnilが見つかりました";
ViewControllerで以下のようにしています:
var imageURL:UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
let url = NSURL(string:"http://cdn.businessoffashion.com/site/uploads/2014/09/Karl-Lagerfeld-Self-Portrait-Courtesy.jpg")
let data = NSData(contentsOfURL:url!)
if data!= nil {
imageURL.image = UIImage(data:data!)
}
}
でエラーになるのは本当に理解できない。
imageURL.image = UIImage(data:data!)
が、データがnilの場合は処理しないように既に指示しているのですが。 リンクの問題ではありません。 また、"data"にも問題はありません。プリントしてみましたが、nilではありませんでした。
32
16
エラーは、
imageURL
がnilである可能性が最も高いです。 コードの別の場所に値を割り当てていますか、それとも実際のコードでは「@IBOutlet」ですか? 値を割り当てないと、nilになりますが、そのタイプのUIImageViewです。!
は、「暗黙的にアンラップされたオプション」であることを意味します。つまり、コンパイラーは、nilであっても使用を停止しませんが、実行時にエラーが発生してクラッシュします。コードの残りの部分は正しいです(
の前に不足しているスペースを想定します。!=
はコンパイルコードに含まれていないタイプミスです)。ただし、オプションを「nil」に対してチェックしてから、force-unwrap演算子を使用するのではなく、「if let」を使用してオプションをアンラップすることをお勧めします。Swift 1.2ベータ版を使用している場合は、2つのifを組み合わせることができます。
または、必要に応じて、「flatMap」を使用します。
これが私のコードが役立つかもしれません。
スウィフト2:
スウィフト3:
使用法。
HTTP接続を使用していて、httpsを使用していない場合は、これを追加することを忘れないでください。
辞書としての「App Transport Security Settings」とその中への「任意の負荷を許可する」は、下の図のように値「はい」のブール値です。 。![ここに画像の説明を入力してください](http://i.stack.imgur.com/wcJrM.png。)。
ここでは、画像をダウンロードする際にクラッシュすることのない方法を紹介します。 現在、あなたは以下のコードを使用しています:
もし、この方法を続けるのであれば、次のコードに変更してください。
そして、あなたがそれを使うなら、あなたの無音クラッシュは解決されると確信しています。
SDWebImageを使用して、URLの画像を表示できます。 https://github.com/rs/SDWebImage。
書いてみてください:
代わりに:
コンパイラーは、感嘆符と操作を混同して、オプションの値を解凍する可能性があります。
UIImageView+AFNetworkingを使用することにより、イメージビューに画像を設定することができます。
まず、UIImageView+AFNetworking objective cクラスをプロジェクトにドラッグし、プロジェクトのブリッジヘッダーファイルでUIImageView+AFNetworking.hクラスをインポートします。そして、この行を使用して、imageviewにプレースホルダを持つ画像を設定します。これにより、ビューに複数の画像を設定することができます。
Swift 3:(この場合の画像は64ビットのバイナリデータです)。
これがコードです。 これを使用して、クラスやその他のものを含める必要はありません。 この拡張機能を使用してください。 これは非常に高速です。
Alamofire を使用していることはかなり大きな可能性があります。使用する場合は、次のように簡単です。
コードは正しいです。以下を使用してください。
これはオプションの値を返します。 それの説明を見てください。
URLStringで初期化されたNSURLオブジェクト。 URL文字列が不正な形式の場合、nilを返します。
。コードでは、「url」しようとしています。!`URLの値がなくなるとクラッシュします。
問題は、viewDidLoadでimageURL UIImageViewがまだ設定されていない可能性があることです。 UIImageViewがnilの場合、オプションのチェーニングを使用します。
imageURL?.image = UIImage(data:data。!)
。UIImageViewの画像をviewDidLayoutSubviews()に設定します。この時点で、ViewControllerのコンセントが設定されていることがわかります。
私のやり方は次のようになります。
**メトード
}
使用方法について
URSessionとURLRequestを使用して画像をダウンロードし、jsonを解析するには、3.0をSwiftします。
Swift 4 :NSCacheを使用し、常にメインスレッドで実行される小さな画像(例:サムネイル)用のシンプルなローダー: