Phương thức 'cảnh (_: openURLContexts :)' không được gọi


9

Trong tập tin info.plist tôi đã cấu hình URL IdentifierURL Schemethành công. Ngoài ra tôi có thể mở ứng dụng bằng URL tùy chỉnh. Vấn đề là khi ứng dụng khởi chạy lần đầu tiên phương thức

func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) does not call.

Tôi có một số chức năng phụ thuộc dựa trên phương pháp trên. Vì vậy, khi ứng dụng ra mắt lần đầu tiên tôi không thể thấy bất cứ điều gì trong ứng dụng của mình.

Ngoài ra tôi đã thêm mã trong phương thức

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {

        guard let _ = (scene as? UIWindowScene) else { return }

        let url = connectionOptions.urlContexts.first?.url

    }

nhưng tôi nhận được url như không ở đây.

Tuy nhiên, nếu ứng dụng của tôi ở chế độ nền và tôi nhấn URL thì các cuộc gọi phương thức trên thành công và chức năng phụ thuộc hoạt động tốt. Sau đây là mã của tôi về scene(_:openURLContexts:)phương pháp trong sceneDelegate.

func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>){
        let url = URLContexts.first?.url
        let urlString: String = url!.absoluteString

        if let urlComponents = URLComponents(string: urlString),let queryItems = urlComponents.queryItems {
            queryParams = queryItems
        } else {
            print("invalid url")
        }

        guard let windowScene = (scene as? UIWindowScene) else { return }


        self.window = UIWindow(windowScene: windowScene)
        //self.window =  UIWindow(frame: UIScreen.main.bounds)

        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        guard let rootVC = storyboard.instantiateViewController(identifier: "LocationViewIdentifier") as? UIViewController else {
            print("ViewController not found")
            return
        }
        let rootNC = UINavigationController(rootViewController: rootVC)
        self.window?.rootViewController = rootNC
        self.window?.makeKeyAndVisible()
    }

Bất cứ ai có thể cho tôi biết tại sao lần đầu tiên phương pháp trên không gọi?


Tình trạng hiện tại của câu hỏi này là gì? Có một trong những câu trả lời giải quyết vấn đề của bạn? Nếu có, xin vui lòng chấp nhận một trong số họ. Bạn cần trợ giúp? Nếu có, bạn có thể giải thích những gì các giải pháp được cung cấp đã làm cho vấn đề của bạn và những gì vẫn còn thiếu? Tôi rất vui lòng giúp bạn về vấn đề này
Muli

Câu trả lời:


2

Có lẽ điều này sẽ giúp tình hình của bạn.

cảnh func (_ cảnh: UIScene, willConnectTo phiên: UISceneSession, tùy chọn kết nốiOptions: UIScene.ConnectionOptions) {

    hãy để urlinfo = ConnectionOptions.urlContexts
    hãy để url = urlinfo.first? .url như! NSURL

}

cảnh func (_ cảnh: UIScene, openURLContexts URLContexts: Set) {

    hãy để url = URLContexts.first! .url là NSURL

}


2

Tôi đã có cùng một vấn đề và phương pháp scene(_ scene:, continue userActivity:)chỉ được gọi khi ứng dụng được mở.

Khi tôi kiểm tra connectionOptionsthông qua phương thức, scene(_ scene:, willConnectTo session, options connectionOptions:)nó có hoạt động người dùng với URL dự kiến. Vì vậy, tôi đã kết thúc việc gọi phương thức đầu tiên bằng tay:

func scene(_ scene: UIScene,
           willConnectTo session: UISceneSession,
           options connectionOptions: UIScene.ConnectionOptions) {

    if let userActivity = connectionOptions.userActivities.first {
        self.scene(scene, continue: userActivity)
    }
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.