NSURLSession未达到服务器

时间:2014-07-17 04:00:36

标签: ios arduino nsurlsession

我为我的Arduino创建了一个iPhone应用程序,基本上,Arduino可以使用第三方REST API提供的非常基本的命令通过本地网络进行通信。我已成功通过计算机的网络浏览器使用API​​,但在尝试通过iPhone应用程序向其发送请求时,它似乎并不想工作。另外请记住,我可以让我的iPhone通过我的iPhone上的Safari正确响应。我(在控制台内)获得的唯一响应是:

{ URL: http://192.168.0.216/mode/7/0 } { status code: 200, headers {
    Connection = close;
    "Content-Type" = "application/json";
} } : <7b226d65 73736167 65223a20 2250696e 20443722 6964223a 20223030 38222c20 226e616d 65223a20 226d6967 6874795f 63617422 2c202263 6f6e6e65 63746564 223a2074 7275657d 0d0a>

API确实应该返回JSON数据,但Web浏览器上的响应实际上会影响我的Arduino LED。

打开LED的代码

NSURL *modeSet = [NSURL URLWithString:[NSString stringWithFormat:@"http://192.168.0.216/digital/%d/1", _pin]];

NSURLSession *session = [NSURLSession sharedSession];
[[session dataTaskWithURL:modeSet
        completionHandler:^(NSData *data,
                            NSURLResponse *response,
                            NSError *error) {
            NSLog([NSString stringWithFormat:@"%@ : %@", response, data]);
        }] resume];
编辑:我决定打印出错误&#39;变量,看它是否从我这里拿回任何东西,我发现了这个:

Error Domain=NSURLErrorDomain Code=-1001 "The operation couldn’t be completed.
(NSURLErrorDomain error -1001.)" UserInfo=0x17807b840 {NSErrorFailingURLStringKey=http://192.168.0.216/mode/7/o,
NSUnderlyingError=0x178449450 "The operation couldn’t be completed.
(kCFErrorDomainCFNetwork error -1001.)", NSErrorFailingURLKey=http://192.168.0.216/mode/7/o}

1 个答案:

答案 0 :(得分:2)

iOS 9之前的回答

回答我自己的问题,如果有人在某个时候发现这个问题,他们就不必问了。 我所做的只是使用NSUTF8Encoding正确格式化我的字符串,如下所示:

NSString *modeSetString = [[NSString stringWithFormat:@"http://192.168.0.216/mode/%d/o", _pin] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *modeSet = [NSURL URLWithString:modeSetString];

iOS 9更新

现在不推荐使用

stringByReplacingPercentEscapesUsingEncoding:,而应该使用stringByRemovingPercentEncoding,如下所示:

NSString *modeSetString = [[NSString stringWithFormat:@"http://192.168.0.216/mode/%d/o", _pin] stringByRemovingPercentEncoding];
NSURL *modeSet = [NSURL URLWithString:modeSetString];