我正在为我的应用添加深层链接,并且在将URL移交给视图控制器时遇到困难。我尝试使用通知,但它不会一直有效。
我的应用代表:
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
let notification = Notification(name: "DeepLink", object: url)
NotificationCenter.default.post(notification)
return true
}
}
和View Controller:
class ViewController: UIViewController {
func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(ViewController.handleDeepLink), name: "DeepLink", object: nil)
}
@objc private func handleDeepLink(notification: Notification) {
let url = notification.object as! URL
print(url)
}
}
问题:当我的应用程序被冷启动时,通知未被处理,我猜这是因为View Controller没有时间将自己注册为观察者。如果我按下主页按钮,请转到Notes并再次单击深层链接,一切正常。
问题:如何在应用程序冷启动时注册View Controller以观察通知?或者有更好的方法将URL从App Delegate发送到View Controller吗?
答案 0 :(得分:1)
我认为最初的假设是假设您的视图控制器没有时间注册自己,这意味着URL和View控制器之间的连接必须解耦并位于视图控制器之外。
然后我会在收到URL时使用某种查找来实例化视图控制器。
例如,
if url.contains(“x”) {
let vc = ViewController(...)
cv.url = URL // Pass contextual data to the view controller.
// Present or push cv
}
随着您的应用变得越来越复杂,您必须管理更具挑战性的场景,例如站立整个控制器堆栈或移除现有的控制器。
答案 1 :(得分:0)
我按照LaunchMe应用中的示例进行操作。这就解决了我的问题:
plot_ly(x = ~ 1:5, y = ~ 1:5, type="scatter",mode="markers",
color = 1:5) %>% hide_colorbar()
答案 2 :(得分:-1)
如果未处理通知则存储,并在viewDidLoad时加载。
var pendingNotificationInfo: PushNotificationInfo?