swift - 准备 segue 为 indexPathForSelectedRow 返回 nil?

标签 swift tableview

我想根据在我的 tableView 中选择的行,将信息从一个 viewController 的数组传递到另一个。为此,我实现了以下功能:

func tableView(_ messagesListTableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        messagesListTableView.deselectRow(at: indexPath, animated: true)
        performSegue(withIdentifier: "individualMessageSegue", sender: self)
        print(indexPath)//returns [0,0]... meaning the first row
    }
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        guard segue.identifier == "individualMessageSegue" else{return}

        if let indexPath = self.messagesListTableView.indexPathForSelectedRow{
            let openedMessageConversation = fullOrderedMessageArray[(indexPath.row)] //cause app to crash because nil value
            let destViewController: IndividualMessageVC = segue.destination as! IndividualMessageVC
            destViewController.messageConvo = openedMessageConversation
        }else{
            print("it was nil")
        }

    }

我相信我已经正确设置了所有内容,但是尽管 didSelectRowAt 的打印语句总是返回 [0,0] 的 indexPath 的值(在表只有一个部分和一行),prepare 中的打印语句总是告诉我 indexPathnil。如果我删除 if let 条件,应用程序将崩溃,因为 fullOrderedMessageArray[(indexPath.row)] 包含 nil 值。我不知道为什么它总是为一个函数返回 nil 而另一个函数不返回。

最佳答案

你能试试这个吗。

func tableView(_ messagesListTableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    messagesListTableView.deselectRow(at: indexPath, animated: true)
    performSegue(withIdentifier: "individualMessageSegue", sender: indexPath)
    print(indexPath)//returns [0,0]... meaning the first row
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    guard segue.identifier == "individualMessageSegue" else{return}

    if let indexPath = sender as? IndexPath {
        let openedMessageConversation = fullOrderedMessageArray[(indexPath.row)] 
        let destViewController: IndividualMessageVC = segue.destination as! IndividualMessageVC
        destViewController.messageConvo = openedMessageConversation
    }else{
        print("it was nil")
    }

}

关于swift - 准备 segue 为 indexPathForSelectedRow 返回 nil?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46067544/

相关文章:

ios - 如何检测用户是否彼此靠近 - Swift

ios - 无法将 Objective C 文件包含到项目中?

swift - didSelectRowAt Index 卡住 Apple Watch 应用程序

ios - Swift 中的动态表 ImageView

ios - estimatedHeightForHeaderInSection 行为怪异

ios - 来自 json 数组的 TableView 中的 imageView

ios - 在 Objective-C 中将字符串转换为字节

ios - 错误: Type [AnyHashable: Any]?没有下标成员(Swift)

ios - 如何在其他 UIViewController 中设置 UIViewController 的位置和大小

swift - Self 和 numberOfInSections