2017-01-06 5 views
1

通常、私はAlamoFireを使用しますが、URLSessionをテストしています。サードパーティのライブラリを使用しないと、リモートデータを取得するためにURLSessionが必要ですか?

tryでデータを取得しようとしましたか?データ(contentsOf:URL)

データを正しく取得できました。このメソッドと比較してURLSessionを使用する利点はありますか?この方法はきれいだと思われますが、多分私は何かを欠いています。

class UrlSessionNetworkManager: NSObject { 

    static let sharedManager = UrlSessionNetworkManager() 

     func parseJSONFromData(urlExtension:String)-> [String : AnyObject]? 
     { 

     let jsonData = try? Data(contentsOf: URL(string:"\(baseURL)\(urlExtension)")!) 

     if let data = jsonData { 

      do { 
      let jsonDictionary = try JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions.mutableContainers) as? [String : AnyObject] 

      return jsonDictionary 

      } catch let error as NSError { 

      print("error processing json data: \(error.localizedDescription)") 
      } 
     } 

     return nil 
     } 
    } 
} 
+2

注 - リモートデータを取得することは、取得したデータで何かを行うこととは完全に別の議論です。したがって、あなたの質問はJSONやJSONの解析とはまったく関係がありません。リモートデータを取得することだけです。関係のないコードはすべて質問から削除し、関連するタスクに焦点を当ててください。 – rmaddy

+0

私は単にURLSessionのためのドキュメントを読むことはあなたの質問に答えると思います。それはすべての利点を教えてくれます。 – rmaddy

答えて

1

いくつかの重要なポイント:ここでは正常に動作します私の完全な機能です

  • サポートされていない行動と考えられている非ローカルURLの内容を取得するたNSDataを使用すると、いつでも壊れることがあります。
  • NSDataを使用して非ローカルURLを取得すると同期がとれます。つまり、問題のスレッドは要求が完了するまで進行しません(潜在的に)。
  • iOSは30秒以上ブロックするプロセスを強制終了します。したがって、NSDataを使用してメインスレッドのURLを取得すると、遅いネットワークではアプリが繰り返し強制終了されます。

基本的に、答えは「あなたがやっていることを何らかの事情で考えないでください」ということです。

+0

ありがとう、それはより明確になります – SwiftyJD

関連する問題