Удалить уведомление при удалении строки UITableView (Swift) - PullRequest
0 голосов
/ 04 июня 2018

У меня есть контроллер представления с несколькими UITableviews.Я хочу, чтобы при удалении строки из представления таблицы удалялось уведомление, связанное с этой строкой, вот мой код, но я получаю сообщение об ошибке Index out of range, вот ссылка на мой проект, если кто-то захочет его протестировать: https://files.fm/f/nwx8e7je

Мой код: он работает без простой строки, но с индексной строкой я получаю сообщение об ошибке.

func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {

    if editingStyle == .delete {

        if tableView == ScheduleTableView{


            let defaults = UserDefaults.standard
            var myarray = defaults.stringArray(forKey: "ScheduleArray") ?? [String]()
            var myarray2 = defaults.stringArray(forKey: "ScheduleTimeArray") ?? [String]()

          // Remove Row
            myarray.remove(at: indexPath.row)
            myarray2.remove(at: indexPath.row)
            defaults.set(myarray, forKey: "ScheduleArray")
            defaults.set(myarray2, forKey: "ScheduleTimeArray")
            ScheduleTableView.deleteRows(at: [indexPath], with: .fade)
            UserDefaults.standard.synchronize()



           // Remove Notification
            let center = UNUserNotificationCenter.current()
            let arrayToSearch = myarray[indexPath.row] as String
            center.getPendingNotificationRequests { (notifications) in
                for item in notifications {
                    if(item.identifier.contains(arrayToSearch)) {
                        center.removePendingNotificationRequests(withIdentifiers: [item.identifier])
                    }
                }
            }


        }

        if tableView == GoalsTableView{


        }
 }

1 Ответ

0 голосов
/ 04 июня 2018

Удалите эту строку let arrayToSearch = myarray[indexPath.row] as String и используйте вместо этого удаленный элемент, поскольку вы уже удалили элемент в myarray.remove(at: indexPath.row)

Вот код:

   func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {

            if editingStyle == .delete {

            if tableView == ScheduleTableView{

               // Here is my code but it gives me an error, first you need to add a row with the add button
                let defaults = UserDefaults.standard
                var myarray = defaults.stringArray(forKey: "ScheduleArray") ?? [String]()

                print(myarray)
                let removedItem =  myarray.remove(at: indexPath.row)
                defaults.set(myarray, forKey: "ScheduleArray")
                ScheduleTableView.deleteRows(at: [indexPath], with: .fade)

                // Remove Notification
                let center = UNUserNotificationCenter.current()
                center.getPendingNotificationRequests { (notifications) in
                    for item in notifications {
                        if(item.identifier.contains(removedItem)) {
                            center.removePendingNotificationRequests(withIdentifiers: [item.identifier])
                        }
                    }
                }


            }

            if tableView == GoalsTableView{



            }
        }
...