2016-06-29 3 views
0

Ответ ниже, изображение находится здесь:Как Сохранить UILocalNotifications в CoreData

enter image description here

+0

Пожалуйста, ответьте в ответ на свой вопрос и примите его. Хороший старт в StackOverflow;) – Kametrixom

+0

О да, я забыл об этом. Благодарю. –

+0

Благодарим за добавление изображения @Kametrixom –

ответ

1

Я искал, как сделать это в течение нескольких дней, и только был в состоянии найти людей, которые хранящиеся UILocalNotificaations в NSUserDefaults. Сохранение их в NSUserDefaults показалось мне неправильным, потому что оно должно использоваться для небольших флагов. Я только сейчас понял, как хранить уведомления в CoreData. Это Использование Xcode 7.3.1 и Swift 2,2

Во-первых вам нужно создать новый объект в вашем CoreDataModel , а затем добавить один атрибут к нему. атрибут должен быть типа Двоичные данные Я назвал свою таблицу/объект «ManagedFiredNotifications» и мой атрибут «уведомление». это должно выглядеть так:

Изображение, связанное в вопросе выше.

Далее вам нужно добавить расширение к UILocalNotification он должен идти, как это:

extension UILocalNotification { 
    func save() -> Bool { 
     let appDelegate = UIApplication.sharedApplication().delegate as? AppDelegate 
     let firedNotificationEntity = NSEntityDescription.insertNewObjectForEntityForName("ManagedFiredNotifications", inManagedObjectContext: appDelegate!.managedObjectContext) 

     guard appDelegate != nil else { 
     return false 
     } 

     let data = NSKeyedArchiver.archivedDataWithRootObject(self) 

     firedNotificationEntity.setValue(data, forKey: "notification") 

     do { 
     try appDelegate!.managedObjectContext.save() 
     return true 
     } catch { 
     return false 
     } 
    } 
} 

Теперь для сохранения уведомления все, что вам нужно сделать, это позвонить

UILocalNotification.save() 

On The уведомление, которое вы хотели бы сохранить. мои уведомления были названы «уведомление», так что я бы назвал notification.save()

Для получения уведомления вам нужен способ, как этот

func getLocalFiredNotifications() -> [UILocalNotification]? { 
    let managedObjectContext = (UIApplication.sharedApplication().delegate as? AppDelegate)!.managedObjectContext 
    let firedNotificationFetchRequest = NSFetchRequest(entityName: "ManagedFiredNotifications") 
    firedNotificationFetchRequest.includesPendingChanges = false 

    do { 
     let fetchedFiredNotifications = try managedObjectContext.executeFetchRequest(firedNotificationFetchRequest) 
     guard fetchedFiredNotifications.count > 0 else { 
      return nil 
     } 


     var firedNotificationsToReturn = [UILocalNotification]() 
     for managedFiredNotification in fetchedFiredNotifications { 

      let notificationData = managedFiredNotification.valueForKey("notification") as! NSData 
      let notificationToAdd = NSKeyedUnarchiver.unarchiveObjectWithData(notificationData) as! UILocalNotification 

      firedNotificationsToReturn.append(notificationToAdd) 
     } 
     return firedNotificationsToReturn 
    } catch { 
     return nil 
    } 

} 

Обратите внимание, что это возвращает массив UILocalNotifications.

При получении их, если вы планируете на удалении нескольких из них, а затем хранить список снова, вы должны удалить их, когда вы им что-то вроде это работает:

func loadFiredNotifications() { 
    let notifications = StudyHelper().getLocalFiredNotifications() 
    if notifications != nil { 
     firedNotifications = notifications! 
    } else { 
     // throw an error or log it 
    } 
    classThatRemoveMethodIsIn().removeFiredLocalNotifications() 
} 

Я надеюсь, что это поможет кому-то, кто имел те же проблемы, которые я пытался реализовать.

Смежные вопросы