Reputation: 1684
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
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