用户收到推送通知后更新表视图中的数据
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()
并且每次都能正常工作。由于该语句正在问题的代码中使用 - 这是他们使用默认值的假设。但谁知道呢,问题很模糊。
感谢您的回答,很抱歉,粘贴的不是您的服务副本:)以上是关于用户收到推送通知后更新表视图中的数据的主要内容,如果未能解决你的问题,请参考以下文章
Android - 收到推送通知 FCM 后,如何在我的 Activity 中更新数据或 UI?