2017-01-27 6 views
0

データを読み込むための次の機能があります。この関数は数日前にうまく機能しました。アプリケーションがクラッシュしてURLを読み込もうとしました。下記のコードとスクリーンショットを参照してください。わずか数日年IOS /迅速コーディング、それはかなり難しい間違っているかを把握するために...App突然クラッシュロードのURL

enter image description here

class func loadDataFromURL(_ url: URL, completion:@escaping (_ data: Data?, _ error: NSError?) -> Void) { 
let session = URLSession.shared 

// Use NSURLSession to get data from an NSURL 
let loadDataTask = session.dataTask(with: url, completionHandler: { (data: Data?, response: URLResponse?, error: NSError?) -> Void in 
    if let responseError = error { 
    completion(nil, responseError) 
    } else if let httpResponse = response as? HTTPURLResponse { 
    if httpResponse.statusCode != 200 { 
     let statusError = NSError(domain:"com.xyz", code:httpResponse.statusCode, userInfo:[NSLocalizedDescriptionKey : "HTTP status code has unexpected value."]) 
     completion(nil, statusError) 
    } else { 
     completion(data, nil) 
    } 
    } 
} as! (Data?, URLResponse?, Error?) -> Void) 

loadDataTask.resume() 
} 
+0

このように、Swift 3では 'dataTask'の' completionHandler'のシグネチャが変更されています。 { }で無効にしてください 'を追加する必要はありません! 'としてください。'(データ:レスポンス:URLResponse ?,エラー:エラー? (Data ?, URLResponse ?, Error?) - > Void) '最後に –

+0

*どこがクラッシュするのか知っていますか?そうでない場合は、各行の後にいくつかのブレークポイントおよび/またはprintステートメントを配置してください。それが私たちを*なぜ*クラッシュさせるのかに近づけます。 – LinusGeffarth

答えて

1

それはXcodeの8.2上で動作し、最新のスウィフト3.0の構文でコード以下の使用: -

func loadDataFromURL(_ url: URL, completion:@escaping (_ data: Data?, _ error: NSError?) -> Void) { 
     let session = URLSession.shared 

     // Use NSURLSession to get data from an NSURL 

     let loadDataTask = session.dataTask(with: url) { (data, response, error) in 
      if let responseError = error { 
       completion(nil, responseError as NSError?) 
      } else if let httpResponse = response as? HTTPURLResponse { 
       if httpResponse.statusCode != 200 { 
        let statusError = NSError(domain:"com.xyz", code:httpResponse.statusCode, userInfo:[NSLocalizedDescriptionKey : "HTTP status code has unexpected value."]) 
        completion(nil, statusError) 
       } else { 
        completion(data, nil) 
       } 
      } 
     } 
     loadDataTask.resume() 

    }