Ich habe in letzter Zeit Objective C gelernt und entschieden, Verbindungen auszuprobieren.
Alles lief großartig mit NSURLConnection, bis ich feststellte, dass es veraltet war, und versuchte, mit NSURLSession zu arbeiten.
Ich versuche ein sehr einfaches Beispiel, aber irgendwie schaffe ich es nicht, dass meine App den Code im Abschlussblock ausführt.
Hier ist der verwendete Code:
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");
Alle Zahlen werden aus der Hauptausführung gedruckt, aber der Abschlussmanager wird nie ausgeführt. Ich habe es auch mit einem Delegaten versucht, ohne Erfolg.
Vielen Dank im Voraus.
EDIT Wie vorgeschlagen, 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 Abschlussmanager wird immer noch nicht ausgeführt. Ich habe es auch mit dem sharedSession versucht, anstelle einer Konfiguration zu übergeben, aber auch ohne Erfolg.
Vielen Dank für die Hilfe.