Ios Swift:尝试与web API通信时出错

Ios Swift:尝试与web API通信时出错,ios,swift,nsurlconnection,nsurlerrordomain,exc-bad-instruction,Ios,Swift,Nsurlconnection,Nsurlerrordomain,Exc Bad Instruction,我正在尝试使用Swift构建一个非常基本的iOS应用程序——这是我第一次这么做。虽然大部分都是直截了当的。我做了一个噩梦,让应用程序与我的API或任何网站对话 这是我正在使用的代码,特别是出错的代码: NSURLConnection.sendAsynchronousRequest(request, queue: queue, completionHandler:{ (response: NSURLResponse!, data: NSData!, error: NSError!

我正在尝试使用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_指令”错误: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错误:error Domain=NSURErrorDomain Code=-1005“网络连接已丢失。”UserInfo=0x7beafcc0{NSErrorFailingURLStringKey=,kCFStreamErrorCodeKey=57,NSErrorFailingURLKey=,NSLocalizedDescription=网络连接已丢失。,KCFStreamerDomainKey=1,NSUnderlyingError=0x7d154ca0“网络连接已断开。”}


听起来像是
数据
。检查
错误
对象的内容,它应该会告诉您原因。最有可能的是,
请求
有问题,但除非我们能够重现问题,否则很难诊断

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


在您修订的问题中,您共享了生成的
n错误
,该错误报告了
-1005
(回想起来,该错误与您先前向我们显示的
4294966291
错误代码相同;后者是
-1005
的无符号整数表示形式)。此错误(如描述所述)对于<代码> NSURLRORNETWorksCalnDebug (这是代码> kcFrrrReNeWorkChansOffels),文档中说:“当客户端或服务器连接在正在进行的负载中间被切断时返回”。 不幸的是,此错误用于各种各样的问题,由于我无法重现您描述的错误,因此很难诊断


请求中缺少的一件事是
内容类型的规范

request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")

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

我解决了这个问题,部分要感谢Rob的回答和一般帮助,这非常有用

然而,最后的关键是非常简单,取自这个问题:


我只需要重新启动模拟器。但是如果没有额外的if data==nil{}语句,我就无法到达那里。

谢谢Rob,我得到:data=(NSData!)nil-这就是你的意思吗?你在发布此消息之前更改了URL吗?上面的内容对我来说很有用。我总是设置
内容类型
,例如
请求.setValue(“application/x-www-form-urlencoded”,forHTTPHeaderField:“Content Type”)
,但我认为这不是这里的问题。这就是我的代码!接下来我将用它运行,看看响应是什么样子。我可能还建议尝试使用不同的URL(看看问题是否是堆栈溢出服务器的响应)。总之,除了缺少错误处理(您现在显然已经添加了错误处理)和缺少
内容类型
,我看不出上述代码有任何问题。如果我们无法重现问题,则很难进行诊断。好的,谢谢您的帮助!!
request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")