0

こんにちは、Objective-C でブロックを使用するのは初めてです

私が欲しいと思うのは次のとおりです。

- (void) iNeedAToken {

  NSString *token = [self theMethodThatShouldReturnTheToken];

}

- (NSString) theMethodThatShouldReturnTheToken {

  [myAwesomeAsyncMethod success:^(id JSON) {

        NSString *token = [JSON objectForKey:@"FOO"];
        return token;

    }]

}

これは可能ですか?それとも、これはすべて間違った論理ですか?

ありがとう!

4

3 に答える 3

2

非同期コードと同期コードを混在させています。渡されたブロックが終了する前に、既に返されていますtheMethodThatShouldReturnTheToken(戻り値がありません) success

最善の策は、成功ブロックからプロセスを続行することです。

- (void) tokenRequestContext1
{
    [self requestToken:^(NSString *token) {
        // do something with token
    }];
}

- (void) requestToken:(void(^)(NSString *))tokenBlock
{
    [myAwesomeAsyncMethod success:^(id JSON) {
        NSString *token = [JSON objectForKey:@"FOO"];
        if (tokenBlock) {
            tokenBlock(token);
        }
    }];
}

を呼び出すことから始めrequestTokenます。これにより、トークンの非同期リクエストが開始されます。しばらく時間が経過する可能性がありますが、最終的doSomethingWithTokenには、受信したトークンを使用できる場所で呼び出されます。

于 2013-01-25T09:09:45.913 に答える
-1

このコードの通常バージョンは次のとおりです。

- (void) iNeedAToken {
  [self theMethodThatShouldReturnTheToken:^(id res){ token = res;}];
  NSString *token = [self theMethodThatShouldReturnTheToken];

}

- (void) theMethodThatShouldReturnTheToken:(void  (^)(id res)result) {

  [myAwesomeAsyncMethod success:^(id JSON) {

        NSString *token = [JSON objectForKey:@"FOO"];
        result(token);

    }]

}
于 2013-01-25T09:11:37.293 に答える
-1

完了ブロックが完了するまで待機する方法の説明があります: http://omegadelta.net/2011/05/10/how-to-wait-for-ios-methods-with-completion-blocks-to-finish /

于 2013-01-25T09:08:47.430 に答える