将一个TableViewController转换为另一个时的SIGABRT

时间:2018-06-13 16:56:01

标签: swift xcode segue sigabrt

这是来自“每个人都可以编码”#39;来自Apple的电子书。变量名称会根据个人用途进行更改。

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    super.prepare(for: segue, sender: sender)

    guard segue.identifier == "saveSegue" else {return}

    let website = websiteTextField.text ?? ""
    let email = emailTextField.text ?? ""
    let username = usernameTextField.text ?? ""
    let password = passwordTextField.text ?? ""
    account = Account(website: website, username: username, email: email, password: password)


}

这是segue函数。相对简单

@IBAction func unwindToAccountsPage(segue: UIStoryboardSegue) {
        guard segue.identifier == "saveSegue" else {return}
        let sourceVC = segue.destination as! AddAccountTVC

        if let account = sourceVC.account {
            if let selectedIndexPath = tableView.indexPathForSelectedRow {
                accounts[selectedIndexPath.row] = account
                tableView.reloadRows(at: [selectedIndexPath], with: .none)
            } else {
                let newIndexPath = IndexPath(row: accounts.count, section: 0)
                accounts.append(account)
                tableView.insertRows(at: [newIndexPath], with: .automatic)
            }
        }
    }

SIGABRT行上有一个let sourceVC = segue.destination as! AddAccountTVC,说是

  

无法转换类型的密码' Password_Alcatraz_2.AccountsTVC'   (0x1019d6468)to' Password_Alcatraz_2.AddAccountTVC' (0x1019d61b0)。

这两个是不同的表视图控制器。我是swift的新手,所以我不明白为什么它不允许我在它们之间传递数据。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

正如@Vacawama声明的那样 - 转到你的故事板并查看你要去的ViewController - 你在代码中将它列为一个AccountsTVC,你将其列为AddAccountTVC

struct Foo{}; struct Bar{}; struct Baz{}; struct Fbr{};

所以其中一个是错的。只是调整,你很好