DidSelectRowAtIndextPath 给我错误的细节

DidSelectRowAtIndextPath give me wrong details

我有一个带有自定义单元格的表格视图,当我点击我的一个单元格时,它会显示下一个 viewcontroller(这是视图控制器的详细信息),它应该是,分配的详细信息这个单元格(从 JSON 收到并在本地保存为字典)是完全错误的,当点击返回并重新输入这个单元格时,我得到了我期望的正确结果

有什么解释吗?

我的代码

这是我获取数据的方式

func getMyNotifications() {


Alamofire.request("\(Constant.GetMyNotifications)/-1", method: .get, encoding: JSONEncoding.default , headers: Constant.Header ).responseJSON { response in


    if let Json = response.result.value as? [String:Any] {


        if let ActionData = Json["ActionData"] as? [[String:Any]] {

            self.myNotifications = ActionData
            self.generalNotifications = ActionData
            //
            self.myNotificationsTV.reloadData()
            self.counter.text = "\(ActionData.count)"
            self.myNotifications.reverse()


            self.animationView.isHidden = true
            self.animationView.stop()
            self.refreshControl.endRefreshing()
        }
        if self.myBalaghat.count == 0 {

            self.myNotificationsTV.isHidden = true
            self.counter.text = "no notificatins to show"
        } else {
            self.myNotificationsTV.isHidden = false

        }
    }
}

}

这是我的 cellForRowAt

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    if segmented.selectedSegmentIndex == 0 {

        return returnCell(balaghat: myNotificationsTV, withData: myNotifications, inCell: indexPath.row)
    }  else {

       return returnCell(balaghat: myNotificationsTV, withData: allNotifications, inCell: indexPath.row)
    }

}

我的 didSelectRowAt

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    generalNotifications.reverse()
    let prepareNum = generalNotifications[indexPath.row]["Id"] as? NSNumber

    currentBalaghId = Int(prepareNum!)
    clickedIndex = indexPath.row
    if let text = generalNotifications[indexPath.row]["NotifDateG"] as? String {
        prepareDateforPassing = text
    }

    if let text = generalNotifications[indexPath.row]["Description"] as? String {
        prepareDesciptionforPassing = text 
    }

    if let text = generalNotifications[indexPath.row]["TypeName"] as? String {
       prepareTypeforPassing = text
   }

   if let text = generalNotifications[indexPath.row]["AddedByName"] as? String {

        prepareProviderNameforPassing = text
   }


    self.performSegue(withIdentifier: "showDetails", sender: self)
    // to remove highlighting after finish selecting
    tableView.deselectRow(at: indexPath, animated: true)
}

您似乎在调用 tableView 的 reloadData 后对 myNotifications 数组执行反向操作。因此,一旦您反转了 myNotifications 数组,请尝试重新加载您的 tableView,如下所示。

   if let ActionData = Json["ActionData"] as? [[String:Any]] {

        self.myNotifications = ActionData
        self.generalNotifications = ActionData
        //
        self.counter.text = "\(ActionData.count)"
        self.myNotifications.reverse()
        self.myNotificationsTV.reloadData()


        self.animationView.isHidden = true
        self.animationView.stop()
        self.refreshControl.endRefreshing()
    }

您是否还注意到,每当您选择一个单元格时,您都在对数组进行反向操作 (generalNotifications.reverse()),这每次都会反转您的数组。所以第一次你会得到正确的值,下一次数组将被反转并返回错误的值。尝试使用如下所示的反向数组。

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    let reversedGeneralNotifications = generalNotifications.reversed()
    let prepareNum = reversedGeneralNotifications[indexPath.row]["Id"] as? NSNumber

    currentBalaghId = Int(prepareNum!)
    clickedIndex = indexPath.row
    if let text = reversedGeneralNotifications[indexPath.row]["NotifDateG"] as? String {
        prepareDateforPassing = text
    }

    if let text = reversedGeneralNotifications[indexPath.row]["Description"] as? String {
        prepareDesciptionforPassing = text 
    }

    if let text = reversedGeneralNotifications[indexPath.row]["TypeName"] as? String {
       prepareTypeforPassing = text
   }

   if let text = reversedGeneralNotifications[indexPath.row]["AddedByName"] as? String {

        prepareProviderNameforPassing = text
   }


    self.performSegue(withIdentifier: "showDetails", sender: self)
    // to remove highlighting after finish selecting
    tableView.deselectRow(at: indexPath, animated: true)
}