将参数传递到块中

Passing a parameter into a block

我正在尝试将参数传递到块中,但我所做的每个配置都会引发错误。我尝试传入的参数是 Venue 类型,如下所示。

这是我在 header

中可能不正确的声明
-(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/

但是你不是想设置块的"returnType",我认为你只是想传递一个"Venue*"到方法中,然后当你的PFQuery找到时调用块它是对象?

在这种情况下,您需要做更多类似这样的事情:

- (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);
}];