сбой при удалении строк из таблицы - PullRequest
0 голосов
/ 18 января 2019

Please check in response data delete successfully but not removed from tableview and also when i run again then data not show beacuse its delePelase check here i am deleting on yes button click Здравствуйте, я удаляю строки из табличного представления, и для меня это нормально работает. Я успешно удален, но после удаления я получаю сбой и ошибку как ниже

Error

Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value

и здесь я покажу вам мой код, где я получаю сбой

Код

@IBAction func btnDeleteYesTapped(_ sender: UIButton) {
    let preferences = UserDefaults.standard
    let uid = "u_id"
    let acTkn = "acc_tkn"

    let u_ID = preferences.object(forKey: uid)
    let A_Token = preferences.object(forKey: acTkn)

    let params = ["user_id": u_ID!, "access_token": A_Token!,"property_id": propertyID!,"occupants_id": oCCID!]
    print(params)
    Alamofire.request(propertyoccupantsdelete, method: .post, parameters: params).responseJSON
        {
            response in
            print(response)
            let result = response.result.value
            print(response)
            let data = result as! [String : AnyObject]
            let status = data["success"] as! String
            if status == "1"{
                let buttonPosition : CGPoint = (sender as AnyObject).convert((sender as AnyObject).bounds.origin, to: self.tblOccList)
                let indexPath = self.tblOccList.indexPathForRow(at: buttonPosition)! //At Here I am Getting crash 
                self.occuPantsData.remove(at: indexPath.row)
                self.tblOccList.deleteRows(at: [indexPath], with: .fade)
                Toast(text: data["message"] as? String).show()
            }else{
              Toast(text: data["message"] as? String).show()
            }
    }
}

Я не могу понять, почему у меня происходит сбой, может кто-нибудь, пожалуйста, скажите мне, где я сделал что-то не так

Код для отображения диалога

 @objc func handleLongPress(longPressGesture:UILongPressGestureRecognizer) {

        let p = longPressGesture.location(in: self.tblOccList)
        let indexPath = self.tblOccList.indexPathForRow(at: p)

        if indexPath == nil {
            print("Long press on table view, not row.")
        }
        else if (longPressGesture.state == UIGestureRecognizer.State.began) {
            print("Long press on row, at \(indexPath!.row)")
            let id = occuPantsData[indexPath!.row].id
            print(id)
            self.oCCID = id
            self.viewDeletePopUp.isHidden = false
        }

    }

Ответы [ 2 ]

0 голосов
/ 18 января 2019

Добавить в табличный вид cellForRowAt метод делегата назначить тег кнопки indexPath.row

     cell.button.tag = indexPath.row 

    @IBAction func btnDeleteYesTapped(sender: UIButton) {
    let preferences = UserDefaults.standard
    let uid = "u_id"
    let acTkn = "acc_tkn"

    let u_ID = preferences.object(forKey: uid)
    let A_Token = preferences.object(forKey: acTkn)

    let params = ["user_id": u_ID!, "access_token": A_Token!,"property_id": propertyID!,"occupants_id": oCCID!]
    print(params)
    Alamofire.request(propertyoccupantsdelete, method: .post, parameters: params).responseJSON
        {
            response in
            print(response)
            let result = response.result.value
            print(response)
            let data = result as! [String : AnyObject]
            let status = data["success"] as! String
            if status == "1"{                
                let indexPath = IndexPath(row: sender.tag, section: 0)
                self.occuPantsData.remove(at: indexPath.row)
                self.tblOccList.reloadData()
                Toast(text: data["message"] as? String).show()
            }else{
              Toast(text: data["message"] as? String).show()
            }
    }
}
0 голосов
/ 18 января 2019

Вы можете определить свойство для сохранения выбранного indexPath, прежде чем появится диалоговое окно.

var selectedIndexPath: IndexPath?

И изменить это

let indexPath = self.tblOccList.indexPathForRow(at: p)

        if indexPath == nil {
            print("Long press on table view, not row.")
        }

К

self.selectedIndexPath = self.tblOccList.indexPathForRow(at: p)

        if self.indexPath == nil {
            print("Long press on table view, not row.")
        }

Тогда попробуйте изменить это

let indexPath = self.tblOccList.indexPathForRow(at: buttonPosition)!

до

guard let indexPath = self.selectedIndexPath else { return }
...