删除 UITableView 行时删除通知(Swift)

Posted

技术标签:

【中文标题】删除 UITableView 行时删除通知(Swift)【英文标题】:Remove Notification when UITableView row is deleted (Swift) 【发布时间】:2018-06-04 15:34:06 【问题描述】:

我有一个带有多个 UITableviews 的视图控制器。我想在从 tableview 中删除一行时删除与该行关联的通知,这是我的代码,但我收到错误 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】:

删除此行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



            
        

【讨论】:

工作,谢谢!

以上是关于删除 UITableView 行时删除通知(Swift)的主要内容,如果未能解决你的问题,请参考以下文章

尝试从 UITableView 中删除行时断言失败

使用 CoreData 删除行时 UITableView 崩溃

删除 UITableView 中的行时出错

如何在 UITableView 中插入和删除行时模拟折纸

添加/删除 UITableView 行时如何防止文本字段变空?

为啥我的 UITableView 在插入或删除行时会“跳跃”?