Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/95.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 将信息发送到另一个视图控制器_Ios_Swift_Uitableview_Firebase_Firebase Realtime Database - Fatal编程技术网

Ios 将信息发送到另一个视图控制器

Ios 将信息发送到另一个视图控制器,ios,swift,uitableview,firebase,firebase-realtime-database,Ios,Swift,Uitableview,Firebase,Firebase Realtime Database,我在获取表视图单元格的Indexpath并将其发送到下一页时遇到问题 var bookName: String? func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "Cells", for: indexPath) as! P

我在获取表视图单元格的Indexpath并将其发送到下一页时遇到问题

var bookName: String?

 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "Cells", for: indexPath) as! ProfileTableViewCell

    print(posts[indexPath.row])
    let post = self.posts[indexPath.row] as! [String: AnyObject]
    self.bookName = post["title"] as? String
}

override public func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    guard segue.identifier == "sendMessageToUser", let chatVc = segue.destination as? SendMessageViewController else {
        return
    }
    chatVc.bookName = self.bookName
}

因此,我试图捕获我单击的任何单元格的标题,并将其发送到SendMessageViewController。问题是它准确地捕获了一些标题,有时它不能准确地捕获标题,我不知道为什么。

cellForRowAt
方法用于创建视图,在本例中是一个表视图单元格,然后将其提供给表视图显示。当表格视图加载数据时,您将看到,比如10个单元格。所以这个函数被调用10次来准备10个单元格。因此,在上一次,索引行将是9,而
bookName
属性将是
post
数组的第10个

现在假设你向下滚动一点,然后一直向上滚动,最后一个准备好的单元格就是第一个单元格。因此,现在您的
bookName
将成为post数组的第一个。这就是为什么你的书名不正确

要解决您的问题,您只需要在用户单击单元格后获取特定的图书名称。因此,删除
cellForRow
方法中为
bookName
赋值的代码,然后添加另一个类似这样的委托函数

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let post = self.posts[indexPath.row] as! [String: AnyObject]
     self.bookName = post["title"] as? String
}

您需要实现tableView委托方法
tableView(ux0:didSelectRowAt:)
。在该方法中,将选定的indexPath保存到实例变量并调用segue


然后在prepareForSegue中,使用保存的indexPath索引到数据模型中,并获取所选单元格的数据。(标题字符串,在您的情况下。)不要从单元格视图中获取数据。视图不是用来存储数据的。

当我这样做并单击单元格时,它会崩溃,并显示致命错误:在打开可选的value@juelizabeth您的表视图是基于此
posts
数组填充的吗?OP询问的是表视图,而不是
UIPickerView
对象。一般的概念类似,但使用选择器视图解释表视图问题的答案似乎有些奇怪。