如何使用 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
(没有任何旧的无效插座)并将正确的参数传递给您的方法调用。
我需要你的帮助!我正在尝试将一组选定的 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
(没有任何旧的无效插座)并将正确的参数传递给您的方法调用。