Partage
  • Partager sur Facebook
  • Partager sur Twitter

Page web personnalisée webview IOS

afficher une page web personnalisée avec web view sur iOS

Sujet résolu
    31 août 2020 à 9:29:52

    Bonjour,

    je tente d'afficher une recherche spécifique sur google via une page webview. Pour le faire, j'ai une url qui est divisée en deux parties :

    - la première est l'url basique de google : https://google.com

    - la seconde est concatenee a la premiere : il s'agit d'une chaine de caractères (ma recherche). Elle est passée d'un view controller précédent au web view qui affiche la recherche.

    Voici le code sur le view controller qui contient la chaine de caractères initiale : 

      @IBAction func linkedinResearchActionButton(_ sender: UIButton) {
            performSegue(withIdentifier: "segueFromLinkedinToWebView", sender: self)
        }
        
        //MARK: - WE PASS DATA HERE
        override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
            if segue.identifier == segueToWebView {
                if let destinationVC = segue.destination as? WebViewController {
                    destinationVC.receivedData = linkedinXrayString.text ?? "no value passed"
                }
            }
        }

    la chaine se trouve a "linkedinXrayString.text". elle est accueillie par la variable "received data". Voici le code sur le view controller qui accueille la chaine de caractères (le webview) : 

    import UIKit
    import WebKit
    
    class WebViewController: UIViewController, WKNavigationDelegate {
        
        
        //MARK: - Relevant variables
        var webView: WKWebView!
        var receivedData: String = ""
        
        //MARK: - LOAD VIEW
        override func loadView() {
            webView = WKWebView()
            webView.navigationDelegate = self
            view = webView
        }
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            // Do any additional setup after loading the view.
            functionToCallWhenTheViewLoads()
        }
        
        
        //MARK: - Function to call when the view loads
        func functionToCallWhenTheViewLoads() {
            let url = URL(string: "https://google.com \(receivedData)")!
            let request = URLRequest(url: url)
            webView.load(request)
            
            webView.allowsBackForwardNavigationGestures = true
            print(receivedData)
        }
        
        //MARK:- WE CONFORM TO THE LINKEDIN DATA PROTOCOL
    //    func sendLinkedinDataToWebView(linkedinData: String) {
    //        self.receivedData = linkedinData
    //        print(receivedData)
    //    }
        
    
    }
    

    le problème que je rencontre est que l'application crash car elle indique trouver une valeur nulle. 

    Fatal error: Unexpectedly found nil while unwrapping an Optional value: file /Users/jeanmartinkyssama/Library/Mobile Documents/com~apple~CloudDocs/Projets IOS/Sourcing To Go/Sourcing To Go/View/WebViewController.swift, line 46

    Je pense que l'erreur se situe au niveau de la configuration de l'url et de la requête ("functionToCallWhenTheViewLoads()") : la chaine de caractères n'est pas encore "importée" et ne peut donc pas être ajoutee. 

    J'ai tenté : 

    - de ne pas ajouter la chaine de caractères dans la premiere url, mais de créer une seconde fonction qui fait exactement la meme chose que "functionToCallWhenTheViewLoads()" mais où je passe la chaine de caractères dans l'url. J'appelle cette fonction juste après la premiere. L'application crash toujours.

    - de creer un url alternatif si jamais l'url initial ne marche pas : 

    "https://google.com \(receivedData)" ?? "https://google.com"

    cela ne marche pas aussi.

    vous avez une idée de quoi faire.

    PS : je m'excuse si mes explications sont confuses. 



    lor

    • Partager sur Facebook
    • Partager sur Twitter
      31 août 2020 à 10:33:46

      Salut,

      ce qui m’embête c’est la partie « je pense que l’erreur se situe ». XCode te dit precisement où ton code crash. Je ne comprends pas dans quel mesure tu as un doute. Tu peux aussi utiliser le debugger en faisant « po maVar » à droite de  »lldb » dans la console. A gauche tu as la stack complete du crash et tu peux taper « bt » dans la console pour l’avoir au format texte. Enfin, tu peux mettre des breakpoint pour suivre l’exécution du code en cliquant à gauche d’une ligne de code. 

      C’est très important de maîtriser ces outils si tu veux pouvoir debugger tes apps. 

      Sinon, tu peux envoyer un screen de l’IDE lorsque l’app a crash ? 

      • Partager sur Facebook
      • Partager sur Twitter
        1 septembre 2020 à 9:30:57

        Geda a écrit:

        Salut,

        ce qui m’embête c’est la partie « je pense que l’erreur se situe ». XCode te dit precisement où ton code crash. Je ne comprends pas dans quel mesure tu as un doute. Tu peux aussi utiliser le debugger en faisant « po maVar » à droite de  »lldb » dans la console. A gauche tu as la stack complete du crash et tu peux taper « bt » dans la console pour l’avoir au format texte. Enfin, tu peux mettre des breakpoint pour suivre l’exécution du code en cliquant à gauche d’une ligne de code. 

        C’est très important de maîtriser ces outils si tu veux pouvoir debugger tes apps. 

        Sinon, tu peux envoyer un screen de l’IDE lorsque l’app a crash ? 

        Voici le screen :



        • Partager sur Facebook
        • Partager sur Twitter
          1 septembre 2020 à 11:21:41

          Fais un po receivedData. Ou ouvre le panel de gauche pour voir les variables. 

          je pense que le problème c’est tout simplement l’espace. Tu dois faire URL(string: ‘google.com ?q=someThing’) et ça marche pas. Logique.  

          • Partager sur Facebook
          • Partager sur Twitter

          Page web personnalisée webview IOS

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown