将数据发送到另一个视图控制器

时间:2018-06-27 16:39:04

标签: ios swift

这是一个我正在玩的学习型应用程序,我在这里呆了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,为什么值会为空?

2 个答案:

答案 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)
    }
}