2016-09-21 31 views
3

UIImageViewに画像を追加しようとしていますが、それ以降はUIImageViewはゼロです。ここに私のコードです:UIImageViewにイメージを追加するには?

fatal error: unexpectedly found nil while unwrapping an Optional value

はおそらく、私が正しくイメージを作成しないでください:私はUIImageViewのためのフレームを設定しようとすると

class ViewController: UIViewController { 

    @IBOutlet var myView: UIView! 
    @IBOutlet weak var testImg: UIImageView! 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     UIGraphicsBeginImageContext(CGSize(width: 500,height: 500)) 
       var path = UIBezierPath() 
     path.lineWidth = 1.0 
     path.moveToPoint(CGPoint(x: 150, y: 150)) 
     var x = 151 
     for ;x<300;x++ 
     { 
      path.addLineToPoint(CGPoint(x: x, y: x)) 
      path.moveToPoint(CGPoint(x: x, y: x)) 
     } 
     path.stroke() 
     let img = UIGraphicsGetImageFromCurrentImageContext() 
     UIGraphicsEndImageContext() 
       testImg = UIImageView(image: img) 
     testImg.frame = CGRect(x: 0,y: 0,width: 500,height: 500) 
     myView.addSubview(testImg) 
     // Do any additional setup after loading the view, typically from a nib. 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 
} 

、私はこのエラーを得ました。

UPDATE

testImg = UIImageView(image: img) 

このコード行は、それを削除し、単に testImg.image = img 固定問題をやって、UIImageViewIBOutletを上書きします。

+1

あなたはコンセントを接続していませんか? – Idan

+0

はい、両方のアウトレットが接続されています – Jamil

+0

ストーリーボードViewControllerクラスがIDインスペクタに設定されていますか? – Idan

答えて

0

例以下のようにinstantiateViewControllerWithIdentifierを使用する必要があります。

if let image = img { 
    // you don't have to instantiate an imageView again, IBOutlet handles it for you  
    testImg.image = image 
    print("Works") 
    // if you don't see this output in your debug console, the condition never succeeds and an img is really nil 
} 
+0

それは同じではありませんか? 'testImg = UIImageView(image:img)'ブロックが追加された場合には – Jamil

+0

が追加され、画像プロパティーを設定する際に同じエラーが発生します。 – Jamil

+0

申し訳ありませんが、コードが更新されました。 – pedrouan

2

簡単な方法:その画像をXcodeのファイルビュー/プロジェクトナビゲータにドラッグアンドドロップします。

イメージビューを選択 - 属性検査 - イメージの下 - 読み込みたいイメージのファイル名を選択します。

できるだけドラッグアンドドロップをお楽しみください。

Hardway:

if let filePath = Bundle.main.path(forResource: "imageName", ofType:  "jpg"), let image = UIImage(contentsOfFile: filePath) { imageView.contentMode = .scaleAspectFit 
    imageView.image = image 
} 
+0

私はファイルがありません、私はUIBezierPath経由で画像を作成しています – Jamil

+0

あなたはコードで画像を作成してUIImageViewに追加することはできません。 – Jamil

+0

謝罪、私はそこに助けることができないと言うつもりだった。 – DotNetChic

0

エラーはあなたが押したりViewControllerを提示する方法に関連する必要があります。あなたがそれを見せたり、提示したときに、コンセントがまだ作成されていないようです。単に

let viewController = self.storyboard?.instantiateViewControllerWithIdentifier("YourStoryBoardId") 
self.navigationController?.pushViewController(viewController!, animated: true) 
+0

私はビューが1つしかなく、 'super.viewDidLoad()'の後にこれら2つの文字列を追加しましたが、何も変更されませんでした。私はそれがUIImageViewの問題だと思う – Jamil

関連する問題