私はthis postと非常によく似た問題を抱えていますが、私はその答えを完全に理解していません。私は補完ハンドラを作成しましたが、期待どおりに機能していないようです。スウィフトURLセッションとURLリクエストが機能しない
func updateTeam(teamID: Int) {
startConnection {NSArray, Int in
//Do things with NSArray
}
}
func startConnection(completion: (NSArray, Int) -> Void) {
let url = URL(string: "http://www.example.com/path")
var request : URLRequest = URLRequest(url: url!)
request.httpMethod = "POST"
let postString = "a=\(Int(teamInput.text!)!)"
request.httpBody = postString.data(using: .utf8)
let dataTask = URLSession.shared.dataTask(with: request) {
data,response,error in
print("anything")
do {
if let jsonResult = try JSONSerialization.jsonObject(with: data!, options: []) as? NSDictionary {
self.teamResult = jsonResult
print(jsonResult)
}
} catch let error as NSError {
print(error.localizedDescription)
}
}
dataTask.resume()
completion(NSArray(object: teamResult), Int(teamInput.text!)!)
}
dataTask文の中では何も実行していないようにみえ、または私はデータが結果を使用しようとする前に、少なくとも、それが完了しません。この補完ハンドラで何が問題になっていますか?
ありがとうございます!
の多くを助けた
をteamResult)、Int(teamInput.text!)!) 'は' print(jsonResult) 'を持つ場所になければなりません。今のように、データタスクを開始してすぐに(おそらく) 'nil'で補完ハンドラを呼び出します。データ・ハンドラ・ハンドラの中で(印刷メソッドのいずれかで)ブレークポイントを設定すると、ブレークポイントがヒットしますか? – keithbhunter
Alamofireを検索して、このプロジェクトのために使用できる場合は、このようなコードを書くことをお勧めします。 –
はい、ハンドラをデータタスクに移動すると美しく動作しました。どうもありがとうございます! –