如何使用 Segue 将一组 PHAssets 传递给另一个 ViewController

How to pass an array of PHAssets to another ViewController using Segue

我需要你的帮助!我正在尝试将一组选定的 PHAssets 从我的第一个 ViewController 传递到下一个。 我在这里声明数组:

import UIKit
import Photos
import BSImagePicker

class ViewControllerSelectPhotos: UIViewController {

@IBOutlet weak var btnSelect: UIButton!

@IBOutlet weak var btnStartGame: UIButton!

@IBOutlet weak var lblStatus: UILabel!

var SelectedAssets = [PHAsset]()

并在此处添加带有名为 BSImagepicker 的 pod 的 PHAssets:

@IBAction func btnSelectPhotos(_ sender: UIButton) {

    let vc = BSImagePickerViewController()

    self.bs_presentImagePickerController(vc, animated: true, select: { (asset: PHAsset) -> Void in

    }, deselect: { (asset: PHAsset) -> Void in

    }, cancel: { (assets: [PHAsset]) -> Void in

    }, finish: { (assets: [PHAsset]) -> Void in

        for i in 0..<assets.count
        { self.SelectedAssets.append(assets[i])
        }

    }, completion: nil)
}

然后我使用 prepare for segue 函数来传递数组:

override func prepare(for segue: UIStoryboardSegue, sender: Any? ) {
if (segue.identifier == "SegueToViewControllerGame") {
        (segue.destination as! ViewControllerGame).SelectedAssetsGame = (SelectedAssets as AnyObject) as! [PHAsset]
   }
}

第二个ViewController我想把数组SelectedAssets保存在数组SelectedAssetsGame:

class ViewControllerGame: UIViewController {

var SelectedAssetsGame: [PHAsset] = []

我总是得到 NSInvalidArgumentException。我能做什么?

非常感谢!

在您的 btnSelectPhotos 方法中,您可以像这样简单地将资产分配给您的 SelectedAssets 变量,而不是执行 for 循环:

finish: { (assets: [PHAsset]) -> Void in    
    self.SelectedAssets = assets
}

然后将您的 SelectedAssets 对象传递给目标视图控制器:

override func prepare(for segue: UIStoryboardSegue, sender: Any? ) {
    if (segue.identifier == "SegueToViewControllerGame") {
        (segue.destination as! ViewControllerGame).SelectedAssetsGame = SelectedAssets
    }
}

编辑(解决方案): 确保您已正确连接 IBOutlets(没有任何旧的无效插座)并将正确的参数传递给您的方法调用。