我正在尝试使用Swift构建一个非常基本的iOS应用-这是我第一次这样做。尽管其中大多数确实很简单。让我的应用程序与我的API或任何其他站点进行通讯,我总感到噩梦!

这是我正在使用的代码,特别是出错的代码:

     NSURLConnection.sendAsynchronousRequest(request, queue: queue, completionHandler:{     (response: NSURLResponse!, data: NSData!, error: NSError!) -> Void in
         println(NSString(data: data, encoding: NSUTF8StringEncoding))
     })

错误的是“NSString(数据:数据,编码:NSUTF8StringEncoding)”

我已经找到了尽可能多的教程,它们都给我带来了同样的问题。我收到一条错误消息:

NSURLErrorDomain-代码:4294966291

我还收到一个'EXC_BAD_INSTRUCTION'错误,内容为:EXC_1386_INVOP,子代码= 0x0(这并没有导致我找到解决方案...

这让我觉得我在设置中没有做正确的事情,或者我应该在偏好设置中打开某些东西,或者是那些与我的代码相反的东西……

这是我的整个代码:
    var URL: NSURL = NSURL(string: "http://stackoverflow.com")

    var request:NSMutableURLRequest = NSMutableURLRequest(URL:URL)
    request.HTTPMethod = "POST"

    var bodyData = "key1=value&key2=value&key3=value"

    println(URL)
    println(bodyData)

    request.HTTPBody = bodyData.dataUsingEncoding(NSUTF8StringEncoding);
    let queue:NSOperationQueue = NSOperationQueue()

    NSURLConnection.sendAsynchronousRequest(request, queue: queue, completionHandler:{ (response: NSURLResponse!, data: NSData!, error: NSError!) -> Void in
        println(NSString(data: data, encoding: NSUTF8StringEncoding))
    })

更新:

使用Rob的代码,我知道打印出错误:

sendAsynchronousRequest错误:错误域= NSURLErrorDomain代码= -1005“网络连接丢失。” UserInfo = 0x7beafcc0 {NSErrorFailingURLStringKey = http://stackoverflow.com,_kCFStreamErrorCodeKey = 57,NSErrorFailingURLKey = http://stackoverflow.com,NSLocalizedDescription =网络连接丢失。,_kCFStreamErrorDomainKey = 1,NSUnderlyingError = 0x7d154ca0“网络连接丢失。”}

最佳答案

听起来datanil。检查error对象的内容,它应该给您指示原因。很有可能request出了点问题,但是除非我们可以重现该问题,否则很难诊断。

无论如何,如果您想使用更多诊断信息来执行请求(如果有问题,请记录error,如果状态码不是200,则记录statusCoderesponse,等等):

NSURLConnection.sendAsynchronousRequest(request, queue: queue) {
    response, data, error in

    if data == nil {
        println("sendAsynchronousRequest error: \(error)")
        return
    }

    if let httpResponse = response as? NSHTTPURLResponse {
        let statusCode = httpResponse.statusCode
        if statusCode != 200 {
            println("sendAsynchronousRequest status code = \(statusCode); response = \(response)")
        }
    }

    println(NSString(data: data, encoding: NSUTF8StringEncoding))
}

在修改后的问题中,您共享了生成的NSError,它报告了-1005(回想起来,它与您先前向我们展示的4294966291错误代码相同;后者是-1005的无符号整数表示形式)。该错误(如描述所描述)是针对NSURLErrorNetworkConnectionLost(即kCFURLErrorNetworkConnectionLost)的,文档中指出:“在正在进行的加载过程中断开客户端或服务器连接时返回”。

不幸的是,此错误用于各种各样的问题,由于我无法重现您描述的错误,因此很难诊断。

请求中缺少的一件事是Content-Type的规范:
request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")

那不会导致您描述的问题,但是始终将请求的类型通知服务器是一种很好的做法。

关于ios - Swift:尝试与Web API通信时出错,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26258651/

10-10 21:32