2016-03-26 14 views
3

Ich versuche, einige JSON-Daten von einem Webserver mit NSURLSession in einer WatchOS 2.2 App herunterzuladen. Der gleiche Code, der fehlerfrei auf dem iPhone selbst läuft, dauert ewig (mit dem Simulator).NSURLSession mit WatchOS 2.2 sehr langsam

Ich habe dieses Beispiel ausgecheckt: https://github.com/shu223/watchOS-2-Sampler, die eine Funktion zum Herunterladen und Anzeigen eines Bildes über NSURLSession hat, und es hat das gleiche Problem.

Der Code dieses Beispiels ist:

let url = NSURL(string:"https://pbs.twimg.com/profile_images/3186881240/fa714ece16d0fabccf903cec863b1949_400x400.png")! 
    let conf = NSURLSessionConfiguration.defaultSessionConfiguration() 
    let session = NSURLSession(configuration: conf) 
    task = session.dataTaskWithURL(url) { (data, res, error) -> Void in 
     if let e = error { 
      print("dataTaskWithURL fail: \(e.debugDescription)") 
      return 
     } 
     if let d = data { 
      let image = UIImage(data: d) 
      dispatch_async(dispatch_get_main_queue(), {() -> Void in 
       if self.isActive { 
        self.image.setImage(image) 
       } 
      }) 
     } 
    } 
    task!.resume() 

Spielen mit ihm herum, habe ich herausgefunden, dass, wenn ich den Code zu

let session = NSURLSession.sharedSession() 

es funktioniert ändern.

Allerdings kann ich dies nicht in meiner App verwenden, weil ich Delegaten einrichten muss.

Was kann ich tun, damit es funktioniert?

+0

hast du irgendeine lösung dafür bekommen? Daten laden mit NSURLSession dauert zu viel Zeit in Uhr OS 2.2 + –

Antwort

1

Ich habe immer noch das gleiche Problem in WatchOS3. Langsame Netzwerkanforderung Vor allem, wenn die Watch-App neu installiert wurde, ist die erste Netzwerkanforderung normalerweise sehr langsam. Es kann bis zu 30s und Timeout dauern, aber sofort in iOS.

Aber ich finde sofortige Verbesserung, indem ich die iOS App benutze, um die Netzwerkanfrage zu stellen und sie an die Watch App zu senden.

Ich benutze WCSession sendMessage: replyHandler: errorHandler in watchOS, um die iOS-App zu benachrichtigen, um eine bestimmte Netzwerkanforderung zu stellen. Dann sende ich die Antwort von der Netzwerkanforderung über den replyHandler in der Sitzung zurück: didReceiveMessage: replyHandler. Es gibt nur eine kurze Verzögerung.

Als Fallback, wenn sendMessage fehlschlägt, mache ich die gleiche Anfrage über die Uhr App, so sollte es noch funktionieren, wenn iPhone nicht in der Nähe ist.

+0

Haben Sie irgendwelche Codebeispiele? –