我最近一直在学习Objective C,并且我决定尝试连接。NSURLSessionDataTask dataTaskWithURL完成处理程序没有被调用
一切都很好,NSURLConnection,直到我发现它已经过时,并试图与NSURLSession工作。
我正在尝试一个非常简单的示例,但似乎无法让我的应用程序在完成块内运行代码。
下面是使用的代码:
NSURL * url = [NSURL URLWithString:@"http://api.openweathermap.org/data/2.5/weather?q=London,uk"];
NSLog(@"2");
NSURLSessionConfiguration *defaultConfigObject = [NSURLSessionConfiguration defaultSessionConfiguration];
NSLog(@"3");
NSURLSession *defaultSession = [NSURLSession sessionWithConfiguration: defaultConfigObject
delegate: nil
delegateQueue: [NSOperationQueue mainQueue]];
NSLog(@"4");
NSURLSessionDataTask * dataTask = [defaultSession dataTaskWithURL:url
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
dispatch_sync(dispatch_get_main_queue(), ^{
NSLog(@"11");
if(error == nil)
{
NSString * text = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
NSLog(@"Data = %@",text);
}
NSLog(@"22");
});
}];
NSLog(@"5");
[dataTask resume];
NSLog(@"6");
我从主执行打印的所有号码,但从来没有执行completionHandler。我也尝试使用委托,没有成功。
在此先感谢。
编辑 至于建议,我已经改变了我的功能如下:
-(void) doGET{
NSURLSessionConfiguration *defaultConfigObject = [NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSession *defaultSession = [NSURLSession sessionWithConfiguration: defaultConfigObject];
NSURLSessionDataTask * dataTask = [defaultSession dataTaskWithURL:[self url]
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
NSLog(@"11");
if(error == nil)
{
NSString * text = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
NSLog(@"Data = %@",text);
}
NSLog(@"22");
}];
[dataTask resume];
}
我完成经理仍然没有得到运行。我也尝试使用sharedSession,而不是传递配置,但没有运气。
感谢您的帮助
你有没有得到这段代码的工作?我的代码几乎是相同的(我想我们访问了相同的网站),我也无法获得完成代码块被调用。但是,我使用iOS模拟器7.1作为单元测试运行我的代码,我想知道这是否会产生任何影响。我还修改了NSURLSession,没有任何帮助。我注意到你把问题标记为已回答,但仍不清楚答案是什么? –