2012-08-17 60 views
0

我使用NSURLConnection的与我的局域网上的Web服务进行通信。当使用Xcode模拟器时,一切都按预期工作。但是,使用iPhone时,连接通常会超时(但并非总是)。NSURLConnection的间歇性故障iPhone设备上的LAN

iPhone是通过wifi连接到LAN。我可以一直使用Safari浏览Web服务器(托管Web服务)。

但是,该应用程序大多失败。它返回didFailWithError函数报告“请求超时”。

该应用程序将间歇性地成功(确切地表现如预期)。我看不到成功或失败的模式。它可能会失败多次,然后成功,然后再次失败(无需重新启动应用程序)。我估计有90%以上的失败率。

网络服务总是收到请求和总是回应。看来设备没有收到或处理响应失败。

我可以看到我的网络没有明显的问题。当然,没有IP地址冲突。

我完全新的应用程序,苹果的Xcode和iPhone。所以这对你来说可能是非常明显的。任何想法,我可以看看解决这个问题?

我目前使用的开发环境如下:

  • 的Mac OS X(10.7.4)
  • 的Xcode 4(靶向4.3)
  • 的iPhone 3GS(5.1.1)

回答

0

显然我不能给你绝对的答案,但可以希望帮助你跟踪问题。

首先,你想审核你的web服务。将JPEG图像放入公共Dropbox文件夹中。现在尝试使用您的代码下载该映像,并使用Safari查看该映像。如果Safari能够正常工作,但是你的代码不能,那么你知道你的代码是问题。

如果都失败,则手机可能有一个坏的收发器,或WiFi网络可能是古怪。把手机拿到一些公共的WIFI位置并重做测试。如果二者在第二个网络上仍然失败,手机可能有缺陷。

如果在所有情况下Safari浏览器的工作原理,但你的代码没有,那么请上传尽可能多的代码尽可能的。另外,如果使用异步接口,您是否重定向?要求凭证?等我会倾向于添加每个NSURLConnection委托方法,并至少添加一个日志,以便知道发生了什么 - 这是记录所有响应。您也可以从响应中获取html返回代码:

assert([response isKindOfClass:[NSHTTPURLResponse class]]); 
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response; 
htmlStatus = [httpResponse statusCode]; 
if(htmlStatus != 200) NSLog(@"Server Response code %i", htmlStatus); 
+0

是的,我的代码是问题。手机wifi在当地的咖啡厅工作正常。 Safari一直在我的局域网上工作。我写了一个快速简单的测试应用程序(请求来自ws的文本响应),该应用程序一直运行。我的失败应用程序有两个视图,每个视图都有自己的NSURLConnection。虽然应用程序只有一个活动连接失败,但我将首先将NSURLConnection代码重构为一个类。谢谢。答案接受,但任何进一步的提示赞赏例如我是否应该一次只运行一个查询?它可以在模拟器上使用两个,但... – Polly 2012-08-17 13:14:57

+0

我在异步查询并登录每个委托方法。不涉及授权。我想我需要只有一个NSURLConnection的实例。这就是我现在要尝试的。请说,如果这听起来是一个合理的方向,或者如果还有其他事情想到。 – Polly 2012-08-17 13:28:11

+0

是的,您使用一个NSURLConnection每个Web事务。在我的应用程序中,我实际上已经在NSOperationQueue中排队了数百次提取,并且其工作完美。如果你想看到一个快速简单的方法来看看https://github.com/dhoerl/NSOperation-WebFetches-MadeEasy - 这是一个简单易用的技术,你可以找到。该项目构建了一个可以运行的演示应用程序。 – 2012-08-17 13:41:52