我的应用程序已成功打开并将参数(从URL方案,即myApp:// sometextToPrint)设置为AppDelegate
类中的变量,但是每当我要处理它们时,它都会在第一次失败时从该URL打开的应用程序。我在前景检查器中有一个应用程序,该应用程序调用用于打印给定参数的函数,但是以某种方式看起来AppDelegate
的加载晚于视图,为什么视图在第一次加载时无法打印参数。
我的代码如下:
AppDelegate.m
func application(_ app: UIApplication, open url: URL, options:
[UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
let geturl = url.host?.removingPercentEncoding;
UserDefaults.standard.set(geturl, forKey: "DeepLinkUrl")
return true
}
ViewController.m
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(appWillEnterForeground),name: UIApplication.willEnterForegroundNotification, object: nil)
}
@objc func appWillEnterForeground() {
print("app on foreground")
let user = UserDefaults.standard
if user.url(forKey: "DeepLinkUrl") != nil {
let str = user.value(forKey: "DeepLinkUrl") as! String
print(str) //this is printed on the second time when I click home button and open app again
}
}
例如,如果我进入Safari并点击以下URL:myApp:// printthistext,则不会打印该文本。当我单击主页按钮并再次单击该应用程序时,它会打印。
P.s。我是新手,还不完全知道哪个类(AppDelegate或ViewContoller)首先被加载/处理。我已经尝试了将近5个小时来解决此问题,但仍然第二次继续打印。
答案 0 :(得分:0)
从
复制代码.after()
进入
func application(_ app: UIApplication, open url: URL,
options: [UIApplication.OpenURLOptionsKey : Any] = [:])
-> Bool {
在该方法中,检查func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?)
-> Bool {
。如果它包含launchOptions
键,则获取该值-并返回url
。
false
答案 1 :(得分:0)
@SalihanPamuk我认为这是由于appWillEnterForeground()
方法造成的。 UIApplication.willEnterForegroundNotification
-这是发布应用程序即将到来的第一个通知。
由于您已经注册了一个观察者来侦听此通知,因此appWillEnterForeground()
方法将在appDelegate的
application(_ app: UIApplication, open url: URL, options:
[UIApplication.OpenURLOptionsKey : Any] = [:]) - method.
尝试实现appDelegate的
func applicationWillEnterForeground(_ application: UIApplication) {
// Do your stuffs here
}
或者,如果您想在使用任何URL打开应用后显示任何特定的ViewController,请在
内部显示该ViewController的代码func application(_ app: UIApplication, open url: URL, options:
[UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
// implemet your code here
}