闹钟应用程序,从 swift 中的 UItableView 中删除特定的本地通知

Alarm clock app, deleting a specific local notification from a UItableView in swift

我正在尝试使用 UILocalNotification 构建一个闹钟。我可以安排警报并将它们填充到 UITableView 中。通知警报工作正常,我可以轻松取消所有计划的通知。我的问题是:

  1. 如何从 table 中删除特定的本地通知?
  2. 如何防止通知在被解雇后从 table 消失,就像苹果闹钟被解雇后停电时一样。

    func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
    if (editingStyle == UITableViewCellEditingStyle.Delete) {
    
    var notificationArray:NSArray = UIApplication.sharedApplication().scheduledLocalNotifications
    var notification:UILocalNotification = notificationArray.objectAtIndex(indexPath.row) as UILocalNotification
    
    UIApplication.sharedApplication().cancelLocalNotification(notification)
    
    alarmTable.reloadData()
    
       }
    }
    

如果要删除一行,请使用

tableView.beginUpdates()
tableView.deleteRowsAtIndexPaths([ indexPathRowToDelete ], withRowAnimation: UITableViewRowAnimation.Fade)
tableViewMain.endUpdates()

您不需要使用 reloadData,因为函数会处理这个。

但是,如果您想使某个条目处于非活动状态,例如不删除它,为每个数据条目使用一个变量,显示它是否处于活动状态。检查 cellForRowAtIndexPath 方法中的标志。然后您可以相应地设置标志并调用 reloadRowsAtIndexPaths.

旁注:访问 UIApplication.sharedApplication() 来检索数据并不是一个好主意。最好将数据传递给 table 视图的数据源。

我找到了解决问题的方法。据我了解,在删除本地通知并重新加载 table 时,它会崩溃,因为它假定已删除通知的行仍然存在。所以我所做的是我添加了一个命令来删除删除本地通知命令下的行。这解决了我的问题。