2016-04-14 13 views
0

私はAとBの2つのメソッド呼び出しを持つおもちゃの問題があります。両方ともAPI呼び出しを行い、両方とも成功コールバックブロックを持っています。メソッドAはコントローラ内のプロパティを生成し、メソッドBはそれを読み込み、メソッドBのapi要求が完了した後にsuccessブロック内でそれを使って計算を行います。今、私はちょうどこのようなの両方を実行することはできません。グローバルプロパティを共有する2つの非同期タスク

@property (nonatomic) NSArray *test; 

[self methodA]; 
[self methodB]; 

AとBからのコールバックは、空のプロパティを読み終わるだろう前に、Bからのコールバックが発生する可能性があります。私はBoltsフレームワークを調べていましたが、これを実現するためにどのように使用するかについての指針を誰かが得られるのだろうかと疑問に思っていましたか?基本的に私は、非同期に起こるようにAPI呼び出しをしたいし、BはAが終了するまで待つべきです。

答えて

0

このようなタスクに外部フレームワークを使用する必要はありません。semaphoreを使用してください。 GCDはセマフォーを提供します。dispatch_semaphore_create and friendsを参照してください。

dispatch_semaphore_t sema; 
@property (nonatomic) NSArray *test; 

sema = dispatch_semaphore_create(0); 
[self methodA]; 
[self methodB]; 

- (void) methodA 
{ 
    ... 
    // set test 
    dispatch_semaphore_signal(sema); 
    ... 
} 

- (void) methodB 
{ 
    ... 
    // prepare to read test 
    dispatch_semaphore_wait(sema); 
    // read test 
    ... 
} 

HTH

:その参照からの最初の例を適応さ

は、擬似コードであなたのようなものを持っています

関連する問題