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 {}

そして、ここでの返品を次のように置き換えます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 に答える