【问题标题】:How to pass an array of PHAssets to another ViewController using Segue如何使用 Segue 将 PHAsset 数组传递给另一个 ViewController
【发布时间】:2018-01-28 11:57:29
【问题描述】:

我需要你的帮助!我正在尝试将一组选定的 PHAsset 从我的第一个 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 的 PHAsset:

@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。我能做什么?

非常感谢!

【问题讨论】:

  • SelectedAssets 包含什么?如果它已经包含[PHAsset],你为什么要投射到AnyObject
  • SelectedAssets 包含照片库中的 PHAsset。我正在铸造,因为 Xcode 建议它。即使我不这样做,我也会得到同样的异常。
  • 请显示/编辑您声明的代码并将您的 PHAsset 对象添加到您的 SelectedAssets 数组。还有你的SelectedAssets 变量声明。
  • 好的,我做到了。感谢您的帮助!

标签: ios arrays swift segue assets


【解决方案1】:

在您的 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(没有任何旧的无效插座)并且您将正确的参数传递给您的方法调用。

【讨论】:

  • 谢谢!但它仍然无法正常工作。应用程序因以下错误而崩溃:由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[Remembar.ViewControllerSelectPhotos btnStartGame:]: unrecognized selector sent to instance 0x7f9d7be0ac30”。
  • 您是否正确连接了您的 IBOutlets?您是否将正确的参数传递给您的 btnStartGame 方法?
  • 是的,你是对的。我找到了导致错误的旧参考。现在一切正常。非常感谢您的时间和帮助,我很感激!
  • @badhanganesh 您好,打扰您了,请介意我问一个与TLPhotoPicker相关的问题
  • @Newbie 是的,请。
猜你喜欢
  • 1970-01-01
  • 2018-10-15
  • 2013-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多