2017-01-29 1 views
0

고유 식별자로 알림을 예약하므로 각 알림에 대해 새 문자열을 만들 필요가 없습니다. 이것은 모두 스케줄링에 적합하지만 문제점은이를 취소하려는 것입니다. 이것은 취소 통지에 대한 코드입니다일정 알림을위한 고유 식별자, Swift 3 iOS 10

let notifIdentifier = TaskManager.notification2.userInfo.description as String! 
    let trigger = UNCalendarNotificationTrigger(dateMatching: components , repeats: true) 
    let request = UNNotificationRequest(identifier: notifIdentifier! , content: TaskManager.notification2, trigger: trigger) 
UNUserNotificationCenter.current().add(request, withCompletionHandler: nil) 

이 일정 알림 내 코드입니다 ... ...

// Deletion of Cells ... 

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

    let managedObject: NSManagedObject = frc.object(at: indexPath) as! NSManagedObject 
    context.delete(managedObject) 
    if tableView == TaskTableViews { 
    let itemController = TaskManager() 
    let nItem: List = frc.object(at: indexPath) as! List 
    itemController.nItem = nItem 
    UNUserNotificationCenter.current().removePendingNotificationRequests(withIdentifiers: [itemController.notifIdentifier!]) 

내가 그들을 취소하려고

, 그들은 매우 공격하고 미스. 식별자를 일반 String으로 변경하여 코드를 테스트했으며 모든 것이 올바르게 작동해야하므로 식별자가 고유 식별자로 사용됩니다.

모든 새로운 작업/알림에 대해 고유 한 ID를 만드는 데 대한 의견이나 제안이 있으십니까?

+0

무엇이 문제입니까? "그들은 매우 맞았고 놓쳤습니다"심지어 무엇을 의미합니까? _ 문제가 무엇인지 설명하십시오. TaskManager는 무엇입니까? – matt

+0

한 번에 하나의 알림 만 취소 할 수 있습니다 (다중이 아님). 알림 일정을 잡으면 앱을 닫고 나중에 앱을 다시 열어서 작업을 삭제하면 알림이 취소되지 않습니다. 내가 말했듯이이 모든 것은 String과 완벽하게 작동하지만 고유 한 ID를 사용하는 것이 내 문제이다. 임씨는 각 작업마다 고유 한 ID를 만드는 또 다른 방법을 찾고 있습니다. – Tai

+0

"모두 String과 완벽하게 작동하지만 고유 ID를 사용하는 것이 내 문제입니다."나는 그 중 무엇을 의미하는지 파악할 수 없습니다. 식별자는 _ 문자열이므로, 당신이 구별하고있는 구별점을 얻지 못합니다. 그리고 당신은 당신의 식별자가 어떻게 생성되고 저장되었는지를 보여주지 않았으므로, 당신이하고있는 일을 누가 알 수 있습니까? 지금까지의 전체 질문은 (적어도 나에게) 완전히 불분명하다. – matt

답변

0

일정 알림

indexPath에서
@IBAction func scheduleNotification(_ sender: AnyObject) { 

    let uuid = UUID().uuidString 


    let content = UNMutableNotificationContent() 
    content.title = NSString.localizedUserNotificationString(forKey: "Example", arguments: nil) 
    content.sound = UNNotificationSound.default() 
    //... 

    var dateComponents = Calendar.current.dateComponents([.year, .month, .day, .hour, .minute], from: self.datePicker.date) 
    dateComponents.second = 0 

    let trigger = UNCalendarNotificationTrigger(dateMatching: dateComponents, repeats: false) 

    let request = UNNotificationRequest(identifier: uuid, content: content, trigger: trigger) 

    UNUserNotificationCenter.current().add(request) { (error) in 

     if let errorPerforms = error { 
     print(errorPerforms.localizedDescription) 
     } else { 
     print("Success") 
     } 
    } 


    let managedObject = ManagedObject(context: self.managedObjectContext!) 
    managedObject.setValue(uuid, forKey: "uuid") 
    //... 

    do { 
    try self.managedObjectContext.save() 
     self.dimiss() 
    } catch {} 
} 

삭제 통지.

// Override to support editing the table view. 
override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { 

    switch editingStyle { 
    case .delete: 

     let managedObject = self.fetchedResultsController.object(at: indexPath) 
     self.managedObjectContext.delete(managedObject) 

     let center = UNUserNotificationCenter.current() 
     center.removeDeliveredNotifications(withIdentifiers: [managedObject.uuid!]) 
     center.removePendingNotificationRequests(withIdentifiers: [managedObject.uuid!]) 

     do { 
     try self.managedObjectContext.save() 
      self.tableView.reloadData() 
     } catch {} 

    default: 
     break 
    } 

} 

잘 작동합니다. NSFetchedResultsControllerDelegate 프로토콜 방법을 사용할 때. 희망이 있습니다.

+0

불행히도 이것은 나를 위해 작동하지 않았다. 더 논의하기 위해 연락 할 수 있습니까? – Tai

+0

좋습니다! 어떻게 도와 드릴까요? – Mannopson

+1

감사합니다. 작동하도록했습니다! – Tai

관련 문제