2017-09-24 7 views
0

NSURLセッションを使用して特定のWebサイトのHTMLコードを取得しています。次のコードはiOS(ViewController.swift)で完璧に動作しますが、interfaceOSroller.swiftのwatchOSでは常に失敗します。コードは常にelse文を出力します:print( "apple watch:error with loading nsurlsession")。Swift:NSURLセッションがwatchOSで動作しない

誰でも私を説明することができます(なぜ失敗するのですか)どのようにこれを変更することができますか?私はすべての反応に感謝しています!

(私はiOSの11とwatchOS 4.0で迅速4.0を使用しています - ペアのAppleウォッチシリーズ2とシミュレータにし、iPhone 7上でテスト)

コード:

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

'if(HTTPURLResponseとしての応答!)= nil'テストがfalseになったので、あなたの' print'文が呼び出されています。これは、応答が 'nil'か、' HTTPURLResponse'ではなかったことを意味します。最も可能性の高いケースは 'nil'であり、' error'変数には何がうまくいかなかったのかを説明するエラーが入っているはずです。この情報は、あなたのコードが失敗している理由を理解するために必要になります。あなたのログに追加し、結果を投稿してください。 –

答えて

0

ありがとうございますが、あなたのためにたくさんですヒントSrstka!

思考の時間の後、私はそれを理解しました。 WatchKitエクステンションのInfo.plistに「Allow Any Loads」を追加するのを忘れてしまった。

関連する問題