当应用程序处于后台时,从推送通知中插入 coredata 记录
Posted
技术标签:
【中文标题】当应用程序处于后台时,从推送通知中插入 coredata 记录【英文标题】:Insert coredata records from push notification when app is in background 【发布时间】:2018-03-02 07:56:32 【问题描述】:当应用程序在后台时,我需要从一个推送通知中将记录插入到 2 个实体的核心数据中,但是当我尝试插入时,它会在从现有记录中获取数据时停止执行,并在另一个通知发生或当用户发生时继续执行点击通知。 我希望在用户未点击推送通知且应用处于后台状态时插入数据。
这是我获取记录并插入的代码部分:
static func insertFromNotificationMessage(_ context: NSManagedObjectContext, message: [AnyHashable: Any]) -> myData
var myData : myData?
context.performAndWait
myData = NSEntityDescription.insertNewObject(
forEntityName: "myData", into: context) as? myData
myData?.guid = message["id"] as? String
myData?.title = message["ttl"] as! String
let anotherData = anotherData.getByUUID(context, UUID: message["id"] as! String) ?? anotherData.insertFromNotificationMessage(context, details: message)
myData?.author = author
do
try context.saveContextAndWait()
catch let error
print("Error\(error)")
return myData!
static func getByUUID(_ context: NSManagedObjectContext, UUID : String)-> anotherData?
let fetchSingleRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "anotherData")
fetchSingleRequest.predicate = NSPredicate(format: "guid =[c] %@", UUID)
do
let fetchedUser = try context.fetch(fetchSingleRequest) as! [anotherData]
if fetchedUser.count > 0
return fetchedUser.first
catch
print("Failed to fetch: \(error)")
return nil
【问题讨论】:
请通过在每个“静态函数”前添加 4 个空格来更好地格式化您的代码,我尝试这样做,但编辑器不允许我保存更改。 【参考方案1】:在应用委托中执行:
func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void)
YOUR OBJECT CLASS.saveMessage(userInfo) // code to save into core data
completionHandler(.NewData)
这是我保存数据的示例函数
static func saveMessage(userInfo: [NSObject : AnyObject]) -> Message
let alertInfo = userInfo["aps"]?["alert"]!
let title:String?
let body:String?
if let alertTitle = alertInfo!["title"] as? String
title = alertTitle
body = alertInfo!["body"] as? String
else
title = userInfo["title"] as? String ?? "CUSTOM TITLE"
body = alertInfo as? String
let message = Message(date: NSDate(), title: title!, message: body!, isReaded: false)
DBUtil.saveContext()
return message
【讨论】:
以上是关于当应用程序处于后台时,从推送通知中插入 coredata 记录的主要内容,如果未能解决你的问题,请参考以下文章