Stefan
Stefan

Reputation: 1335

iOS Block issue with AFNetworking

I'm currently learning blocks, and I want to use them with AFNetworking. I made method in Singletone:

- (void)getAllPlayers:(void (^)(NSArray *playerz, bool succeed))blockPlayers {
    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    [manager GET:@"https://api.myjson.com/bins/530re" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {



    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"Error: %@", error);
    }];

}

I called this method in viewDidLoad:

[[Manager sharedInstance]getAllPlayers:^(NSArray *playerz, bool succeed) {
            if (succeed == YES) {
                self.allClubs = playerz;
                [self.tableView reloadData];
            }
        }];

But nothing is downloaded.

Upvotes: 0

Views: 65

Answers (2)

oxigen
oxigen

Reputation: 6263

You got data from server in response object. After that you need to parse it and return in block:

- (void)getAllPlayers:(void (^)(NSArray *playerz, bool succeed))blockPlayers {
  AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
  [manager GET:@"https://api.myjson.com/bins/530re" parameters:nil 
  success:^(AFHTTPRequestOperation *operation, id responseObject) {

     NSArray* players = [self getPlayersFromJson:responseObject];
     blockPlayers(players, YES); 

  } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
     blockPlayers(nil, NO);
  }];

}

So you need to create parser method getPlayersFromJson

Upvotes: 1

maty_nz
maty_nz

Reputation: 280

Yo forgot to call the blockPlayers Completion handler.

- (void)getAllPlayers:(void (^)(NSArray *playerz, bool succeed))blockPlayers {
    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    [manager GET:@"https://api.myjson.com/bins/530re" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {

        NSarray *returnedPLayerz = [NSArray array];
        //Here treat operation and response Object to extract playerz and assing it to returnedPlayerz
        blockPLayers(returnedPlayerz, YES);

    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        blockPlayers(nil, NO);
        NSLog(@"Error: %@", error);
    }];

}

Upvotes: 1

Related Questions