用户收到推送通知后更新表视图中的数据

Posted

技术标签:

【中文标题】用户收到推送通知后更新表视图中的数据【英文标题】:Update data in Table View after user received push notification 【发布时间】:2021-07-10 14:39:29 【问题描述】:

我有一个带有推送通知和 RealmDB 的应用程序。在通知日期进入 RealmDB 之后,用户自己选择通知日期。每次用户收到通知时,下一次通知的日期都会发生变化,用户可以在表格视图中看到日期。问题是......用户收到通知后,他通过推送通知进入应用程序,因此 func 不起作用。如果用户通过打开它进入应用程序 - 一切正常。 在 cellForRowAt 中:

center.getDeliveredNotifications  (notifications) in
        for notification:UNNotification in notifications 
            print(notification.request.identifier)
            if (notification.request.identifier == timeId)
                
                let today = notification.date
                
                let realNextDate = Calendar.current.date(byAdding: .day, value: timeInterval!, to: today)
                
                let realm = try! Realm()
            
                try! realm.write 
                    for plants in realm.objects(MyPlant.self).filter("id == %@", timeId as Any) 
                        plants.nextDate = realNextDate
                        plants.prevDate = today
                
            
        
    

【问题讨论】:

我猜timeId 未定义或不是预期的,因此过滤器不会返回要更新的对象。但是,该代码未包含在内,因此这是一个疯狂的猜测。另外,当你想要一个由它的 id 定义的对象时,为什么要使用 for 循环? 【参考方案1】:

我认为这背后的原因是您在AppDelegate 中配置Realm

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool 
    return true

这是当您通过点击App icon 打开应用程序时执行的操作。在您通过点击push notification 打开应用程序的情况下,上述AppDelegate 方法不会执行。而是执行如下所示的方法,

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) 
    // unused

因此,您还必须在此方法中进行一些配置,以便在点击通知时它可以工作。

【讨论】:

这个答案可能是 100% 正确的,但是你怎么知道他们有像 RealmService.shared.config() 这样的东西?我问是因为问题中的代码不使用 RealmService 因为他们每次调用时都使用let realm = try! Realm()。只是好奇。 我的错,这是我为我的应用程序提供的服务,复制粘贴哈哈。让我快速修复它 哈哈。凉爽的。请记住,对于使用 default.realm 文件的仅限本地领域,无需进行任何配置 - 只需要 let realm = try! Realm() 并且每次都能正常工作。由于该语句正在问题的代码中使用 - 这是他们使用默认值的假设。但谁知道呢,问题很模糊。 感谢您的回答,很抱歉,粘贴的不是您的服务副本:)

以上是关于用户收到推送通知后更新表视图中的数据的主要内容,如果未能解决你的问题,请参考以下文章

保存推送通知并在 UITableView 中显示

Android - 收到推送通知 FCM 后,如何在我的 Activity 中更新数据或 UI?

更新应用程序后在 Work Light 6.0 中收到多次推送通知

如何在收到推送通知后刷新 watchkit 界面控制器

收到推送通知时推送视图控制器 iOS

从推送通知收到的 alertView 打开应用程序后冻结