Мое приложение успешно открывает и устанавливает параметры (из 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. Я новичок в Swift и точно не знаю, какой класс (AppDelegate или ViewContoller) загружается / обрабатывается первым. Я уже почти 5 часов пытаюсь это исправить, все еще продолжаю печатать во второй раз.