1

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

- (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 问题的一些建议。任何帮助,将不胜感激。

4

2 回答 2

3

将块作为参数传递给函数

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

然后将 RETURN HERE 替换为block(res);

于 2012-11-07T18:50:24.657 回答
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:方法中的数组。

于 2012-11-07T18:56:48.850 回答