【问题标题】:NSURLConnection not giving error with internet connection disabled?NSURLConnection 在禁用互联网连接时没有给出错误?
【发布时间】:2012-04-07 01:05:49
【问题描述】:

只是想知道下面的这段代码......当我关闭我的互联网连接并运行它时,我预计我会在我的控制台日志中看到“连接失败”。谁能解释为什么我不是?谢谢。

NSString *urlString = [NSString stringWithFormat:@"http://www.myurl.com/RSS/feed.xml"];

NSURL *serviceURL = [NSURL URLWithString:urlString];

//Create the request
NSURLRequest *request = [NSURLRequest requestWithURL:serviceURL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:30];

//Create the connection and send the request
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];


//Make sure the connection is good
if (connection) {
    //instantiate the responseData structure to store the response
    self.responseData = [NSMutableData data];

}
else {
    NSLog(@"Connection failed");
}

【问题讨论】:

    标签: objective-c ios nsconnection


    【解决方案1】:

    您实际上还没有尝试提出请求。 if (connection) 不测试请求是否成功,它只测试您是否能够创建表示连接的对象。您仍然需要调用其中一种方法来发出请求。详情请见the documentation

    【讨论】:

    • 嗯..你能告诉我如何测试它是否成功吗?我试过 if ([NSURLConnection canHandleRequest:request]) 但这似乎也不起作用
    • 假设发送的是异步请求,需要实现委托方法connection:didFailWithError:
    • 感谢吉姆提供的信息。 re:cmets 下面.. didReceiveData 似乎即使在 WiFi 关闭的情况下也能正常工作。这就是我所说的缓存。我现在看到,即使页面返回 404,它也会接收数据。你能告诉我确保返回所需的完整文件的常用方法是什么吗?
    • NSHTTPURLResponse 有一个 statusCode 属性,对应于 HTTP 响应状态。 200 是成功响应的通常值,404 是丢失文档的通常值。还有其他可能性。你应该参考RFC 2616看看标准代码是什么。
    【解决方案2】:

    您要检查连接本身是否失败,而不是连接对象的创建,使用委托,如下所示:

    -(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{
            NSLog("Oh noes D=");
    }
    

    【讨论】:

    • 我按照你的建议实现了这个委托方法......但是在关闭互联网的情况下它仍然没有触发?
    • 好吧,我在你的代码中看到你确实将委托设置为 self,所以如果该函数没有触发,我无法告诉你问题是什么......你也是实现其他委托方法? (didFinishLoading 和 didRecieveData) 3 个中的一个无论如何都应该触发!
    • 奇怪!我按照您的建议实施了 didReceiveData 。我运行该应用程序并触发。然后我关闭 WiFi(并验证我无法访问任何网站)再次运行该应用程序,它仍然会触发? 困惑
    • 也许它仍然通过 3G 建立连接。要对此进行测试,请将您的手机置于飞行模式。
    • 只是在我的 MacBook 上使用模拟器。没有3G
    猜你喜欢
    • 2021-11-14
    • 2012-01-24
    • 2013-02-23
    • 1970-01-01
    • 2019-05-26
    • 1970-01-01
    • 1970-01-01
    • 2018-06-02
    • 1970-01-01
    相关资源
    最近更新 更多