我正在我的iOS10
应用中实施本地通知。这是一个简单的主 - 细节应用程序,用户输入有效期限的物品(药物)。项目过期时会触发通知。
应用程序结构是DrugTableViewController
和DetailViewController
(包含药物对象的数组药物),嵌入在导航控制器中。
当用户点按通知时,我正在尝试在tableview
中选择相应的行。
当应用程序处于打开状态或后台时,以下代码成功,但在收到通知时关闭应用程序时不会选择该行(尽管它仍然正确加载了表格视图)。
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
// Pull out the buried userInfo dictionary
let userInfo = response.notification.request.content.userInfo
if let drugID = userInfo["drug"] as? String {
let navigationController = self.window?.rootViewController as! UINavigationController
let destinationViewController = navigationController.viewControllers[0] as! DrugTableViewController
navigationController.popToViewController(destinationViewController, animated: true)
var selectRow: Int? = nil
for drug in destinationViewController.drugs {
if drug.uniqueID == drugID {
selectRow = destinationViewController.drugs.index(of: drug)!
let path = IndexPath(row: selectRow!, section: 0)
destinationViewController.tableView.reloadData()
destinationViewController.tableView.selectRow(at: path, animated: true, scrollPosition: .top)
selectRow = nil
break
}
}
}
// Call completion handler
completionHandler()
}
我还尝试从故事板ID中实例化我的详细视图控制器,但这不起作用。
非常感谢任何帮助!
答案 0 :(得分:1)
在加载表视图之前,可以调用此代码。首先尝试延迟通知处理一秒钟:
DispatchQueue.main.asyncAfter(deadline: .now() + 1, execute: {
//Your code here
})
看,它会不会有帮助。如果愿意的话,想想你如何检查是否已经加载了tableview(或者只是留下了延迟)