2

本当に単純なので、これは私を真剣に狂わせ始めています。電話ライブラリから画像を取得するコレクションビューセルがあります

セルをタップすると、取得したコレクションのインデックスを取得し (Photo Framework を使用)、選択した画像を (PHImageManage の imageFromAsset を介して) 新しいビュー コントローラーに送信し、この画像を新しい UIimage プロパティに割り当ててから、表示しようとします。私のUIimageViewアウトレットFAILでそれを!デバッグ ウィンドウで、画像が collectionviewcontroller から FullImageViewController に渡されていることがわかりますが、アウトレットでエラーが発生する理由がわかりません (永遠に NIL を返します)。

ここに少しのコードとバグ キャプチャがあります -- collectioncontroller が最初に

 func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
    let cell: PhotoCollectionViewCell = collectionView.dequeueReusableCellWithReuseIdentifier(identifier, forIndexPath: indexPath) as! PhotoCollectionViewCell

 //   cell.contentView.backgroundColor = UIColor.redColor()
    let asset: PHAsset = photosAsset[indexPath.item] as! PHAsset

    PHImageManager.defaultManager().requestImageForAsset(asset, targetSize: cellSize, contentMode: .AspectFit, options: nil) { (reuslt:UIImage?, info:[NSObject : AnyObject]?) -> Void in
        if let image = reuslt {
            cell.displaythunmb(image)
        }
    }

    return cell

}

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {

    let asset=photosAsset[indexPath.item] as! PHAsset
    let size:CGSize = CGSizeMake(200, 200)

    PHImageManager.defaultManager().requestImageForAsset(asset, targetSize: size, contentMode: .AspectFit, options: nil) { (result:UIImage?, info:[NSObject : AnyObject]?) -> Void in
        let controller:FullImageViewController = FullImageViewController()
        if let image = result {
        controller.dislpayFullImage(image)
    }
    }

    performSegueWithIdentifier("gofull", sender: self)

}

ここに fullImageViewController があります

class FullImageViewController: UIViewController {
var image:UIImage = UIImage()

@IBOutlet weak var fullimage: UIImageView!


override func viewDidLoad() {
    super.viewDidLoad()
    navigationController?.hidesBarsOnTap = true

}
override func viewWillAppear(animated: Bool) {
    //dislpayFullImage()

}

func dislpayFullImage(fullimg:UIImage){

    if let monimage:UIImage? = fullimg {
        image=monimage!
         fullimage.image = image
    }

}

}

これにより、「fullimage.image = image」行に「致命的なエラー: オプションの値のラップ解除中に予期せず nil が見つかりました」が表示されます

アンラップ、強制アンラップなどを試みましたが、何も機能していないようです

債務ウィンドウで、プロパティをフォローするときは、次のことを行う必要があります。

fullimg UIImage 0x00007ff3fb6506f0 0x00007ff3fb6506f0 自己テスト.FullImageViewController 0x00007ff3fb6526e0 0x00007ff3fb6526e0
UIKit.UIViewController

フルイメージ UIImageView! なし なし

モノイメージ UIImage? 0x00007ff3fb6506f0 0x00007ff3fb6506f0

私がどこを台無しにしているかについての考え>

4

1 に答える 1

1

FullImageViewControllerプログラムで のインスタンスを作成していますがIBOutlet、このビュー コントローラーで を使用しています。

おそらくストーリーボードを使用してインスタンス化する必要があるため、次のようにする必要があります。

let storyboard = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle())
let destination = storyboard.instantiateViewControllerWithIdentifier("yourIdentifier") as! FullImageViewController

ただし、識別子を設定することを忘れないでくださいFullImageViewController

編集:セグエを使用しているため、データを次のように渡す必要がありますprepareForSegue(_:):

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "gofull" {
        let destination = segue.destinationViewController as! FullImageViewController
        destination.someImage = result
    }
}

ただし、ビューが読み込まれる前にアクセスするとクラッシュが発生するため、値をinまたはfullimageに渡してみてください。fullimageviewWillAppearviewDidLoad

あなたのFullImageViewController

var someImage: UIImage?

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)

    if let image = someImage { fullimage.image = image }
}
于 2016-01-24T04:27:05.627 に答える