【问题标题】:NSURLConnection always TRUENSURLConnection 总是 TRUE
【发布时间】:2019-05-26 14:08:53
【问题描述】:

我正在使用下面的代码检查服务器连接,但是“连接”始终为 TRUE..

我知道 'initWithRequest:delegate:' 已被弃用:建议改用 NSURLSession,但为了简单起见,我更喜欢继续使用它,因为 NSURLSession 实现起来似乎要复杂得多。

有什么建议可以让它发挥作用吗?

NSURL *url = nil;
NSMutableURLRequest *request = nil;

NSString *getURL = [NSString stringWithFormat:@"%@?TEST=%@",URL, str];

url = [NSURL URLWithString: getURL];
request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request addValue: @"application/x-www-form-urlencoded; charset=utf-8" forHTTPHeaderField:@"Content-Type"];

NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];

if(connection) //Always true!!!
{
    mutableData = [NSMutableData new];
    NSLog(@"SERVER CONNECTION OK");
}
else
{
    NSLog(@"NO SERVER CONNECTION");
}

【问题讨论】:

  • 难怪这是真的 - 这意味着对象已成功创建和初始化。我想现在你应该通过适当的调用开始使用它。
  • 为什么看到connection被分配了?这不是你想要的吗?这个问题的标题令人困惑。

标签: objective-c nsurlconnection nsurlconnectiondelegate


【解决方案1】:

connection 是您创建的 NSURLConnection 对象。如果它被创建,它将返回 true。

问题是您没有处理可以使用这些委托函数使用的响应数据:

-(BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace;
-(void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge;
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error;
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response;
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data;
-(void)connectionDidFinishLoading:(NSURLConnection *)connection;

你应该在didFailWithError中输入一个日志来检查你的连接是否成功。

我很确定你没有尝试过 NSURLSession,但你应该尝试过,因为 NSURLSession 可以写成块,这样更容易编写代码(没有委托)。 实际上 NSURLSession 比 NSURLConnection 更容易实现。

【讨论】:

    猜你喜欢
    • 2013-08-06
    • 2017-05-10
    • 2013-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多