ios - 将参数传递到 block 中

标签 ios objective-c block

我正在尝试将参数传递到 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/

相关文章:

objective-c - Objective-C block : Is there a way to avoid 'self' being retained?

Magento:<操作方法="unsetChild">不删除 block

ios - Swift:滑出菜单

ios - 使用 collectionView(_ :layout:sizeForItemAt:) without calling reloadData()) 调整 UICollectionView 单元格的大小

ios - 快速重绘 View

objective-c - forwardInvocation 到其他类而不是实例

python - 扭曲为客户端/服务器问题

ios - 应用录制的视频在手机上播放时有时不播放音频

iOS Metal : Enabling user interaction

objective-c - iPad 框架上的 UIActionSheet 太小