从块内返回变量

时间:2012-11-07 18:47:26

标签: iphone objective-c asynchronous nsarray objective-c-blocks

下面我有一些代码应该返回一个数组,来自服务器的响应发生在一个块中:

- (NSMutableArray *)getArray
{
    NSMutableDictionary* params =[NSMutableDictionary dictionaryWithObjectsAndKeys:
                                  @"pending", @"command",
                                  @"2" , @"userID",
                                  nil];

    [[API sharedInstance] commandWithParams:params
                               onCompletion:^(NSDictionary *json) {
                                   //result returned


                                   if ([json objectForKey:@"error"]==nil) {
                                       NSMutableArray *res = [[NSMutableArray alloc] init];
                                       [res addObject:@"1234"];

                                       RETURN HERE

                                   } else {
                                       //error
                                       [UIAlertView title:@"Error" withMessage:[json objectForKey:@"error"]];
                                   }

                               }];
}

解析数据并创建数组后,我想返回我为getArray方法调用创建的数组。到目前为止,经过几个小时的尝试,我没有任何运气,即使尝试了之前关于stackoverflow的问题的一些建议。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:3)

将块作为参数传递给函数

- (NSMutableArray *)getArray:(void (^)(NSArray *))block {}

然后用block(res);

替换RETURN HERE

答案 1 :(得分:1)

我会在课堂的某个地方创建一个方法,让我们说- (void)arrayFetched:(NSArray *)fetchedArray

然后你修改你的代码:

//...
if ([json objectForKey:@"error"]==nil) {
    __weak NSMutableArray *res = [[NSMutableArray alloc] init];
    [res addObject:@"1234"];

    dispatch_async(dispatch_get_main_queue(), ^{
        [self arrayFetched:[res copy]];
    });
    //...

然后希望你想要使用arrayFetched:方法中的数组。