次のコードを使用して、サーバーに画像を投稿しています。
_@IBAction func postButtonPressed(sender: UIButton) {
let task = NSURLSession.sharedSession().dataTaskWithRequest(createRequest("http://xx.xx.xxx.xxx/xxxx/"), completionHandler: {
data, response, error in
println(NSString(data: data, encoding: NSUTF8StringEncoding))
})
task.resume()
}
_
ここで、createRequest()
は必要なNSURLRequestオブジェクトを作成します。
これはシミュレーターを使用すると正常に機能します。問題は、iPhoneでアプリを実行すると、次のエラーが発生することです。
_Error Domain=NSURLErrorDomain Code=-1001 "The operation couldn’t be completed. (NSURLErrorDomain error -1001.)" UserInfo=0x155e71f0 {NSErrorFailingURLKey=http://xx.xxx.xxx.xxx/xxxx/, NSErrorFailingURLStringKey=http://54.148.156.117/query/, NSUnderlyingError=0x155674d0 "The operation couldn’t be completed. (kCFErrorDomainCFNetwork error -1001.)"}
_
このエラーはタイムアウトエラーであることがわかりました。アプリや電話を再起動しても効果はありませんでした。さらに、Webブラウザからサーバーに画像を投稿しようとしましたが、問題なく動作しました。
このタイムアウトエラーの原因は何ですか?
EDIT:ネットワークアクティビティを監視すると、送信する画像が0.1 MBであるにもかかわらず、アプリが10MBのデータを送信することに気付きました。
サーバーが大きすぎると思われる画像を送信していたため、POSTリクエストでタイムアウトエラーが発生したようです。サーバーが画像を受け入れられるようにするために、画像を縮小しました。
この投稿 が示唆するように、NSURLErrorDomain Code=-1001
エラーは、次のような多くの原因で発生する可能性があります。
他の人に役立つことを願っています
返信が遅れていますが、最近、割り当てられた新しいアプリケーションの実行中にエラーが発生しました。アプリケーションは、私の会社のシステム管理者によってRLドメインがブロックされていますそれらの1つです。
URLアクセスを許可するように依頼します。その後、応答が返され、アプリケーションが完全に実行されます。
これは実際の解決策ではありませんすべての人にとってかもしれませんが、一部の開発者は制限された環境でこれによって助けを得ることができます。
私の場合、問題はサードパーティのライブラリにありました-FirebasePerformance
。バグレポートのURL: https://github.com/firebase/firebase-ios-sdk/issues/486
Application/jsonでヘッダーを使用し、リクエストを送信する問題を修正しました。
let headers: HTTPHeaders = [
.accept("application/json")
]
AF.request(url, method: .post, parameters: score, encoder: JSONParameterEncoder.default, headers: headers)
私の場合、リクエストのタイムアウトを増やすだけで問題は解決しました。