【发布时间】:2014-05-01 19:28:41
【问题描述】:
我最近一直在学习 Objective C,我决定尝试连接。
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");
我从主执行中打印了所有数字,但从不执行完成处理程序。我也尝试过使用委托,但没有成功。
提前致谢。
编辑 按照建议,我已将我的功能更改为以下内容:
-(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,但这些都没有帮助。我注意到您将问题标记为已回答,但仍不清楚答案是什么?
标签: ios objective-c nsurlsession