这是一个我正在玩的学习型应用程序,我在这里呆了2天。
我有两个视图设置,用于将用户选择的数据发送到另一个视图(它们分别称为AddCoinVC和MainVC)。
在AddCoinVC中,当用户单击按钮时执行发送
let vc = MainViewController()
vc.coinArray.append(CoinWallet(coinName: "Test", coinSymbol: "Test", coinAmount: "0"))
performSegue(withIdentifier: "backToMain", sender: self)
我现在已经设置了一个断点,并且打印vc.coinArray
会为我打印正确的值=
($ R0 = 1值{(coinName =“ Test”,coinSymbol =“ Test”,coinAmount =“ 0”) }
但是当我转到MainVC的另一个断点时,它显示0值。
var coinArray = [CoinWallet]()
这是我使用的var,MainVC中的默认值为CoinWallet,它在首次加载应用程序时为空。这是自定义类。
class CoinWallet {
var coinName:String = ""
var coinSymbol:String = ""
var coinAmount:String = ""
init(coinName: String, coinSymbol:String, coinAmount: String) {
self.coinName = coinName
self.coinSymbol = coinSymbol
self.coinAmount = coinAmount
}
}
从AddCoinVC到MainVC'coinArray'执行搜索和发送时,应将此值发送给它。
如果vc.coinArray为1,为什么值会为空?
答案 0 :(得分:0)
您应该在AddCoinVC
中添加此方法,然后按以下方式发送数据,
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let mainVC = segue.destination as? MainViewController {
mainVC.coinArray.append(CoinWallet(coinName: "Test", coinSymbol: "Test", coinAmount: "0"))
}
}
在下面的代码行中,您只是创建一个新实例,而不是被隔离的viewController
。
let vc = MainViewController()
vc.coinArray.append(CoinWallet(coinName: "Test", coinSymbol: "Test", coinAmount: "0"))
您只应按如下所示在segue
单击上执行button
,并在上述方法内设置任何数据。
performSegue(withIdentifier: "backToMain", sender: self)
答案 1 :(得分:0)
发生错误是因为MainViewController()
没有返回您期望的视图控制器。这是一个新的空白实例,不是情节提要中的实例。
由于您仍在执行segue,因此将CoinWallet
实例作为sender
中的performSegue
参数传递
let coin = CoinWallet(coinName: "Test", coinSymbol: "Test", coinAmount: "0")
performSegue(withIdentifier: "backToMain", sender: coin)
然后实现prepare(for segue
并使用destination
属性作为对主视图控制器的引用。
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "backToMain" {
let coin = sender as! CoinWallet
let mainViewController = segue.destination as! MainViewController
mainViewController.coinArray.append(coin)
}
}