Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/95.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UIImageView将(segue)nil传递给另一个ViewController_Ios_Swift_Uiimageview_Uicollectionview_Segue - Fatal编程技术网

Ios UIImageView将(segue)nil传递给另一个ViewController

Ios UIImageView将(segue)nil传递给另一个ViewController,ios,swift,uiimageview,uicollectionview,segue,Ios,Swift,Uiimageview,Uicollectionview,Segue,经过一天的研究和尝试,我来帮助你 我有一个collectionView将图像传递给imageView,就像instagram(让你想象一下界面),我认为我正确地执行了segue,但在另一个viewController上它最终为零 我的代码如下: 第一视图控制器> // TakePhotoViewController.swift import UIKit import Photos class TakePhotoViewController: UIViewCo

经过一天的研究和尝试,我来帮助你

我有一个collectionView将图像传递给imageView,就像instagram(让你想象一下界面),我认为我正确地执行了segue,但在另一个viewController上它最终为零

我的代码如下:

第一视图控制器>

    //  TakePhotoViewController.swift

    import UIKit
    import Photos

    class TakePhotoViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout {

        @IBOutlet weak var photoImageView: UIImageView!


    var imageArray = [UIImage]()

    override func viewDidLoad(){
        super.viewDidLoad()
        grabPhotos()
    }

    @IBAction func postPhotoTaken(_ sender: Any) {
        self.performSegue(withIdentifier: "photoPost", sender: self)
    }


    func grabPhotos(){

        let imgManager = PHImageManager.default()
        let requestOptions = PHImageRequestOptions()

        requestOptions.isSynchronous = true
        requestOptions.deliveryMode = .highQualityFormat

        let fetchOptions = PHFetchOptions()
        fetchOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: true)]

        if let fetchResult: PHFetchResult = PHAsset.fetchAssets(with: .image, options: fetchOptions){
            if fetchResult.count > 0 {
                for i in 0..<fetchResult.count{
                    imgManager.requestImage(for: fetchResult.object(at: i), targetSize: CGSize(width: 200, height: 200), contentMode: .aspectFill, options: requestOptions, resultHandler: {image, error in

                        self.imageArray.append(image!)

                    })
                }
            }

            else {
                print("You Don't Have Any Photos!")
            }
        }

    }

    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return imageArray.count
    }

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath)
        let imageView = cell.viewWithTag(1) as! UIImageView

        imageView.image = imageArray[indexPath.row]
        return cell
    }

    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        photoImageView.image = imageArray[indexPath.row]
    }

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {

        let width = collectionView.frame.width / 3 - 1

        return CGSize(width: width, height: width)
    }

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
        return 1.0
    }

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
        return 1.0
    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "photoPost" {

            let photoPost = segue.destination as! PhotoPostTableViewController

            let imagePhoto = self.photoImageView.image
            photoPost.photo = imagePhoto!
        }
    }

}
//  photoPostViewController.swift

import UIKit

class PhotoPostTableViewController: UITableViewController {

    var photo: UIImage!

    @IBOutlet weak var newPhoto: UIImageView!

    override func viewDidLoad() {
        super.viewDidLoad()

        newPhoto.image = photo
        print(photo)

    }

    override func viewDidAppear(_ animated: Bool) {
        newPhoto.image = photo
        print(photo)
    }

}

你们能帮帮我吗?

基于这样一个事实,
prepare(for:)
中的
segue.identifier
返回nil,这意味着执行的segue是由情节提要触发的,而不是由
后期拍摄(u.sender:Any)
触发的

检查情节提要,找到从第一个VC到第二个VC并由按钮触发的序列,然后将其
标识符
更改为
“photoPost”


我相信在那之后你可以删除
postPhotoTaken(uu.sender:Any)

如果你在让imagePhoto=self.photoImageView.image上中断,self.photoImageView.image的值是多少?那一行被调用了吗?对不起,我是Swift编程新手,我添加了断点,但似乎根本没有被调用。我甚至在那一行下面写了一个打印,并添加了一个断点,但控制台上没有显示任何内容。如果segue.identifier==“photoPost”{:
print(“>>>\(segue.identifier)”,请将下面的一行放在
前面
要找出执行的序列的标识符是什么-然后你可以将条件更改为新的代码你的序列标识符实际上是“photoPost”吗?在
postPhotoTaken()
中,他正在尝试执行该序列,所以我猜他有一些连接不正确的地方