我为我的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}
答案 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];