答案 0 :(得分:2)
我正在搜索如何执行此操作几天,并且只能找到在 NSUserDefaults 中存储 UILocalNotificaations 的人。在 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()
在您要保存的通知上。我的通知被命名为' notice'所以我打电话给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()
}
我希望这可以帮助那些遇到与我试图实现相同问题的人。