gpt4 book ai didi

ios - 从 Collection View 传递到 View Controller 的简单图像数据失败

转载 作者:可可西里 更新时间:2023-11-01 02:18:01 26 4
gpt4 key购买 nike

这真的让我发疯了,因为它真的很简单。我有一个 collectionviewcell,可以从手机库中获取图像

当我点击一个单元格时,我得到了获取的集合的索引(我使用的是 Photo Framework),然后将所选图像(通过 PHImageManage 的 imageFromAsset)发送到一个新的 View Controller ,将这个图像分配给一个新的 UIimage 属性,然后尝试在我的 UIimageView socket 上显示它失败 !在调试窗口中,我可以看到图像从 collectionviewcontroller 传递到我的 FullImageViewController,但我不明白为什么我的 outlet 出现错误(永远返回 NIL)

这里有一些代码和一个 bug 捕获 -- 首先是 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)

}

这是完整的ImageViewController

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
}

}

这给了我“ fatal error :在“fullimage.image = image”行上展开可选值时意外发现 nil”

我试过解包、强制解包等等,似乎没有任何效果

在债务窗口中,当我关注我必须关注的属性时:

fullimg UIImage 0x00007ff3fb6506f0 0x00007ff3fb6506f0自测.FullImageViewController 0x00007ff3fb6526e0 0x00007ff3fb6526e0UIKit.UIViewController UIViewController
图片 UIImage 0x00007ff3fb6506f0 0x00007ff3fb6506f0

全图像 UIImageView!无 无

monimage UIImage? 0x00007ff3fb6506f0 0x00007ff3fb6506f0

知道我哪里搞砸了吗>

最佳答案

您正在以编程方式创建 FullImageViewController 的实例,但您在此 View Controller 中使用了 IBOutlet

您可能想使用 Storyboard实例化它,因此您必须执行如下操作:

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

不要忘记为您的 FullImageViewController 设置标识符。

编辑:由于您使用的是 segue,因此您应该在 prepareForSegue(_:) 中处理传递数据:

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

但是在 View 加载之前访问fullimage还是会导致崩溃,所以你应该尝试在viewWillAppear中将值传给fullimage或者viewDidLoad.

在你的FullImageViewController中:

var someImage: UIImage?

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

if let image = someImage { fullimage.image = image }
}

关于ios - 从 Collection View 传递到 View Controller 的简单图像数据失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34972143/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com