Ich habe in letzter Zeit Objective C gelernt, und ich beschloss, Verbindungen zu versuchen.NSURLSessionDataTask dataTaskWithURL Vervollständigungshandler wird nicht aufgerufen
Alles war großartig mit NSURLConnection, bis ich entdeckte, dass es veraltet war, und versuchte, mit NSURLSession zu arbeiten.
Ich versuche ein sehr einfaches Beispiel, aber ich kann nicht scheinen, meine App zu bekommen, den Code innerhalb des Abschlussblocks auszuführen. Hier
ist der Code verwendet:
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");
ich alle Zahlen bekommen von der Haupt Ausführung gedruckt, aber die completionHandler wird nie ausgeführt. Ich habe das auch mit einem Delegierten versucht, ohne Erfolg.
Vielen Dank im Voraus.
EDIT Wie bereits angedeutet, habe ich meine Funktion wie folgt geändert:
-(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];
}
Mein ist Abschluss-Manager noch nicht laufen zu bekommen. Ich habe auch mit der sharedSession versucht, anstatt eine Konfiguration zu übergeben, aber auch kein Glück.
Danke für die Hilfe
Haben Sie jemals diesen Code zum Funktionieren gebracht? Mein Code ist fast identisch (ich denke, wir haben die gleichen Websites besucht) und ich kann auch nicht den Abschlusscode-Block abrufen. Ich benutze meinen Code jedoch als Einheitentest mit dem iOS-Simulator 7.1, und ich frage mich, ob dies Auswirkungen hat. Ich habe auch an der 'NSURLSession' herumgebastelt und nichts half mir dabei. Ich habe bemerkt, dass Sie die Frage als beantwortet markiert haben, aber es ist immer noch nicht klar, was die Antwort war? –