gpt4 book ai didi

swift - 如何在 CoreData 中保存 UILocalNotifications

转载 作者:搜寻专家 更新时间:2023-11-01 07:22:27 26 4
gpt4 key购买 nike

答案在下面,图片在这里:

enter image description here

最佳答案

几天来我一直在寻找如何做到这一点,但只能找到将 UILocalNotificaations 存储在 NSUserDefaults 中的人。将这些保存在 NSUserDefaults 中对我来说似乎是错误的,因为它应该用于小标志。我刚刚终于弄清楚如何在 CoreData 中存储通知。这是使用 Xcode 7.3.1 和 Swift 2.2

首先,您需要在 CoreDataModel 中创建一个新的实体然后向其添加一个属性。该属性应为 Binary Data 类型 我将表/实体命名为“ManagedFiredNotifications”,将属性命名为“notification”。它应该是这样的:

上面问题中链接的图片。

接下来您需要向 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()

在您要保存的通知上。我的通知被命名为“通知”,所以我会调用 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()
}

我希望这可以帮助遇到与我在尝试实现此问题时遇到相同问题的人。

关于swift - 如何在 CoreData 中保存 UILocalNotifications,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38108533/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com