2017-09-24 7 views
0

J'utilise une session NSURL pour obtenir le code HTML d'un site Web spécifique. Le code suivant fonctionne parfaitement avec iOS (dans ViewController.swift) mais échoue toujours dans watchOS (dans InterfaceController.swift). Le code imprime toujours l'instruction else: print ("apple watch: error with loading nsurlsession").Swift: Session NSURL ne fonctionne pas avec watchOS

Quelqu'un pourrait-il m'expliquer (pourquoi il échoue et) comment je pourrais changer cela? Je suis reconnaissant pour chaque réponse!

(j'utilise rapide 4.0 avec iOS 11 et 4.0 watchos - testé dans le simulateur et sur iPhone 7 avec apparié série d'Apple montre 2)

code:

func authorizeBase() { 
    let loginString = NSString(format: "%@:%@", username, password) 
    let loginData: NSData = loginString.data(using: String.Encoding.utf8.rawValue)! as NSData 
    let base64LoginString = loginData.base64EncodedString(options: []) 

    let url: NSURL = NSURL(string: urlPath)! 

    let request: NSMutableURLRequest = NSMutableURLRequest(url: url as URL) 
    request.setValue("Basic \(base64LoginString)", forHTTPHeaderField: "Authorization") 
    request.httpMethod = "GET" 

    let config = URLSessionConfiguration.default 

    config.requestCachePolicy = .reloadIgnoringLocalCacheData //deactivate cache 
    config.urlCache = nil 

    let authString = "Basic \(base64LoginString)" 
    config.httpAdditionalHeaders = ["Authorization" : authString] 
    let session = URLSession(configuration: config) 

    session.dataTask(with: url as URL) { 
     (data, response, error) in 
     if (response as? HTTPURLResponse) != nil { 
      _ = NSString(data: data!, encoding: String.Encoding.utf8.rawValue) 

      let contents = String(data: data!, encoding: .ascii) 

      print("apple watch: Content:", contents!) 
      self.parseHTMLOverview(content: contents!) 

      self.updateTable() //!!! 

     } 
     else { 
      print("apple watch: error with loading nsurlsession") 
     } 

    }.resume() 

} 
+0

Votre instruction 'print' est appelée car le test' if (réponse as? HTTPURLResponse)! = Nil' est apparu faux. Cela peut signifier que la réponse était 'nil' ou que ce n'était pas une' HTTPURLResponse'. Le cas le plus probable est qu'il était «nul», dans lequel la variable 'error' devrait être remplie avec une erreur expliquant ce qui s'est mal passé. Cette information, pour le dire à la légère, sera nécessaire pour comprendre pourquoi votre code échoue. Veuillez l'ajouter à votre journal et publier les résultats. –

Répondre

0

Remerciez est beaucoup pour votre indice Srstka! Après des heures de réflexion, je l'ai compris. J'ai juste oublié d'ajouter "Allow Arbitrary Loads" à l'Info.plist dans l'extension WatchKit.