ios - 如何更改sendSynchronousRequest:urlRequest,因为已弃用

标签 ios objective-c deprecated

我是Objective-C的入门者,我有一种方法

- (void)getAltitudeFromElevationFromAlt:(float)latitude Long:(float)longitude{
    dispatch_async( dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        NSString *apiKey = @"IzaSyA5CDPUYC7GY5PzJdu_K4ouRy55gm3R5BO4";
        NSString *address = [NSString stringWithFormat:@"https://maps.googleapis.com/maps/api/elevation/json?locations=%f,%f&key=%@", latitude, longitude, apiKey];
        // Send a synchronous request

        NSURLRequest * urlRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:address]];
        NSURLResponse * response = nil;
        NSError * error = nil;
        NSData * data = [NSURLConnection sendSynchronousRequest:urlRequest
                                              returningResponse:&response
                                                          error:&error];

       NSString *str = @"No Data";
        if (error == nil)
        {
            NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
            str = [NSString stringWithFormat:@"%@", dictionary[@"results"][0][@"elevation"]];
            //  NSLog(@"text  = %@", dictionary[@"results"][0][@"elevation"]);
            NSLog(@"str = %@", str);
            dispatch_async( dispatch_get_main_queue(), ^{
                _altitudeMeterLabel.text = str;
            });
        }
    });
}

请帮助更改此顺序
NSData * data = [NSURLConnection sendSynchronousRequest:urlRequest
                                          returningResponse:&response
                                                      error:&error];

最佳答案

使用NSURLSession异​​步请求:

- (void)getAltitudeFromElevationFromAlt:(float)latitude Long:(float)longitude {

   NSString *apiKey = @"IzaSyA5CDPUYC7GY5PzJdu_K4ouRy55gm3R5BO4";
   NSString *address = [NSString stringWithFormat:@"https://maps.googleapis.com/maps/api/elevation/json?locations=%f,%f&key=%@", latitude, longitude, apiKey];
   // Send an ASYNCHRONOUS request

   NSURLRequest * urlRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:address]];
   [[[NSURLSession sharedSession] dataTaskWithRequest:urlRequest completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
      NSString *str = @"No Data";
      if (error) {
         NSLog(@"%@", error);
      } else {
         NSError * jsonError = nil;
         NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&jsonError];
         if (jsonError) {
            NSLog(@"%@", jsonError);
         } else {
            str = [NSString stringWithFormat:@"%@", dictionary[@"results"][0][@"elevation"]];
            //  NSLog(@"text  = %@", dictionary[@"results"][0][@"elevation"]);
            NSLog(@"str = %@", str);
         }
         dispatch_async( dispatch_get_main_queue(), ^{
            _altitudeMeterLabel.text = str;
         });
      }
   }] resume];
}

注意:

由于数据任务始终被调度到后台线程,因此不需要全局dispatch_async块。

关于ios - 如何更改sendSynchronousRequest:urlRequest,因为已弃用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40605594/

相关文章:

java - Springs XmlBeanFactory 已弃用

ios - 如何按升序对字符串中包含日期的数组进行排序

objective-c - 尽管导入了正确的 header ,但使用自定义类的编译器错误

ios - 如何从 iOS native 共享功能中删除某些选项?

ios - 处理 EKEvent.recurrenceRule 属性的删除

android - 在 Android 中,如何避免 onStart 方法被弃用?

ios - 在 json 数据中添加 InvoicID 新键和值

ios - 如何使用 ShareKit 和 OAuth 设置 iOS

ios - -[NSDate dateFromString:]:无法识别的选择器发送错误

ios - 从 View Did Load 中检索到的数据创建 TableView Controller