【发布时间】:2016-01-24 04:14:08
【问题描述】:
这真的让我发疯了,因为它真的很简单。 我有一个从手机库中获取图像的 collectionviewcell
当我点击一个单元格时,我会获取获取的集合的索引(我使用 Photo Framework),然后将所选图像(通过 PHImageManage 的 imageFromAsset)发送到新的视图控制器,将此图像分配给新的 UIimage 属性,然后尝试在我的 UIimageView 插座上显示它 失败 ! 在调试窗口中,我可以看到图像正在从 collectionviewcontroller 传递到我的 FullImageViewController,我不明白为什么我的插座上出现错误(永远返回 NIL)
这里有一些代码和一个错误捕获——首先是集合控制器
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
}
}
}
这给了我“致命错误:在展开可选值时意外发现 nil”在“fullimage.image = image”行
我尝试过解包、强制解包等,似乎没有任何效果
在债务窗口中,当我关注我必须关注的属性时:
fullimg UIImage 0x00007ff3fb6506f0 0x00007ff3fb6506f0
自检。FullImageViewController 0x00007ff3fb6526e0 0x00007ff3fb6526e0
UIKit.UIViewController UIViewController
图片 UIImage 0x00007ff3fb6506f0 0x00007ff3fb6506f0
全图 UIImageView!无 无
monimage UIImage? 0x00007ff3fb6506f0 0x00007ff3fb6506f0
知道我在哪里搞砸了>
【问题讨论】:
-
使用
if let monimage: UIImage?有点违背使用if let的目的。如果fullimg有值,您只希望它继续,但现在即使它是nil,它仍然会继续 -
您的
fullimage属性似乎为零。你是如何初始化它的? -
我的猜测是,您在视图加载之前将图像分配给
fullimage,因此fullimage仍然是nil。 -
你是对的,很抱歉,虽然它也不适用于
if let monimage: UIImage仍然崩溃 -
第一条评论只是告诉你你错误地使用了
if let。第二条评论很可能是导致崩溃的原因;)
标签: ios swift uiimage uicollectionview optional-values