Mahir
Mahir

Reputation: 1684

Incompatible block pointer type when returning array?

I have a database of food objects with parse.com, and I'm trying to return an array containing all the foods.

- (NSArray*) allFoods {

    NSMutableArray *foodArr = [NSMutableArray array];
    PFQuery * foodQuery = [PFQuery queryWithClassName:@"Food"];
    foodQuery.limit = 5000;
    [foodQuery findObjectsInBackgroundWithBlock:^(NSArray * foods, NSError * error) {
            for (PFObject *foodRaw in foods) {
                MenuItem *food = [[MenuItem alloc] initWithName:[foodRaw valueForKey:@"name"]  andURL:nil];
                [foodArr addObject:food];
            }

        return foodArr;

    }];
}

However, the block expects void, and I'm unable to include the return statement without causing error.

Incompatible block pointer types sending 'NSMutableArray *(^)(NSArray *__strong, NSError *__strong)' to parameter of type 'PFArrayResultBlock' (aka 'void (^)(NSArray *__strong, NSError *__strong)')

Upvotes: 0

Views: 570

Answers (1)

mityaika07
mityaika07

Reputation: 653

You should use something like that:

typedef void (^ArrayResponseBlock)(NSArray *array);

- (void) allFoodsAsyncWithCompletion:(ArrayResponseBlock)completionBlock {

    NSMutableArray *foodArr = [NSMutableArray array];
    PFQuery * foodQuery = [PFQuery queryWithClassName:@"Food"];
    foodQuery.limit = 5000;
    [foodQuery findObjectsInBackgroundWithBlock:^(NSArray * foods, NSError * error) {
        for (PFObject *foodRaw in foods) {
            MenuItem *food = [[MenuItem alloc] initWithName:[foodRaw valueForKey:@"name"]  andURL:nil];
            [foodArr addObject:food];
        }

        completionBlock(foodArr);        
    }];
}

Upvotes: 2

Related Questions