我正在尝试将参数传递到 block 中,但我所做的每个配置都会引发错误。我尝试传入的参数是 Venue 类型,如下所示。
这是我在标题中可能不正确的声明
-(void)update:(Venue* (^)(NSArray *myScenes, NSError *error))block;
这是我的实现,我知道这是错误的,因为我不能引用传入的变量,但它是唯一不会抛出错误的东西
-(void)update:(Venue* (^)(NSArray *myScenes, NSError *error))block{
//download scenes
PFQuery *query = [PFQuery queryWithClassName:@"Scenes"];
[query orderByDescending:@"createdAt"];
[query whereKey:@"venueId" equalTo:venue.objectId];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
if (error) {
NSLog(@"Error: %@ %@", error, [error userInfo]);
}
else {
// We found messages!
scenes = objects;
//[PFObject pinAllInBackground:objects];
NSLog(@"Retrieved %lu messages", (unsigned long)[scenes count]);
NSLog(@"Venues = %@", scenes);
}
}];
}
我是这样调用它的
[_venues[0] update:^Venue *(NSArray *myScenes, NSError *error) {
if (error) {
NSLog(@"Error: %@ %@", error, [error userInfo]);
}
else {
NSLog(@"myObjects are: %@", myScenes);
_venues[0].scenes = myScenes;
}
}];
又错了。基本上我想知道如何以一种让我传入 Venue* 类型变量的方式声明它
最佳答案
格式如下:
- (void)someMethodThatTakesABlock:(returnType (^)(parameterTypes))blockName;
此示例来自http://goshdarnblocksyntax.com/
但是您并没有尝试设置 block 的“returnType”,我认为您只是想将“Venue*”传递到方法中,然后在 PFQuery 找到它的对象时调用该 block ?
在这种情况下,您需要执行类似这样的操作:
- (void)updateVenue:(Venue*)venue completion:(void(^)(NSArray *myScenes, NSError *error))completion{
然后在方法内执行以下操作:
[query findObjectsInBackgroundWithBlock:^(NSArray *scenes, NSError *error) {
if (error) {
NSLog(@"Error: %@ %@", error, [error userInfo]);
}
else {
// We found messages!
//[PFObject pinAllInBackground:scenes];
NSLog(@"Retrieved %lu messages", (unsigned long)[scenes count]);
NSLog(@"Venues = %@", scenes);
}
if (completion) completion(scenes, error);
}];
关于ios - 将参数传递到 block 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34427952/