我最近一直在學習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,沒有任何幫助。我注意到你把問題標記爲已回答,但仍不清楚答案是什麼? –