recherche

Maison  >  Questions et réponses  >  le corps du texte

ios - 如何在外面取得AFNetworking的block里的数据

写了一个方法需要返回值,但是需要返回的值在afnetworking的block回调里,

- (NSString *)correctShiftWithLongitude:(NSString *)lat latitude:(NSString *)lon {

            NSDictionary *params = @{
                                   @"lon" : lon, // 原始经度
                                   @"lat" : lat, // 原始纬度
                                   };

            __block NSString *longitude; // __block不管用,静态变量也不管用
            [self.manager POST:URL parameters:params success:^(NSURLSessionDataTask * _Nonnull task, id  _Nonnull responseObject) {
                
                NSDictionary *locDictionary = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableLeaves error:nil];
                longitude = [locDictionary objectForKey:@"lon"]; // 纠正后经度
    
            } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
                NSLog(@"%@", error);
            }];

    NSLog(@"%@", longitude); // longitude一直为空,请问如何在AFN的block回调里修改外部数据,或者说如何在block外输出数据?
    // 返回值一直为空
    return longitude;
}

代码如上,longitude一直为空,请问如何取得AFN的block里的数据,或者说如何在AFN的block外输出数据?

大家讲道理大家讲道理2893 Il y a quelques jours471

répondre à tous(1)je répondrai

  • 巴扎黑

    巴扎黑2017-04-17 18:00:00

    Ce n'est pas facile de revenir ici. Vous êtes asynchrone, vous pouvez donc bloquer de manière asynchrone. Par exemple, cela peut être modifié comme suit.

    - (void)correctShiftWithLongitude:(NSString *)lat latitude:(NSString *)lon finishBlock:(void(^)(NSString *longitude, NSError *error))finishBlock
    {
        NSDictionary *params = @{
                                 @"lon" : lon, // 原始经度
                                 @"lat" : lat, // 原始纬度
                                 };
        
        __block NSString *longitude; // __block不管用,静态变量也不管用
        [self.manager POST:URL parameters:params success:^(NSURLSessionDataTask * _Nonnull task, id  _Nonnull responseObject) {
            
            NSDictionary *locDictionary = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableLeaves error:nil];
            longitude = [locDictionary objectForKey:@"lon"]; // 纠正后经度
            
            if (finishBlock)
            {
                finishBlock(longitude, nil);
            }
            
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            NSLog(@"%@", error);
            if (finishBlock)
            {
                finishBlock(nil, error);
            }
        }];
    }

    répondre
    0
  • Annulerrépondre