2016-08-25 12 views
0

最初にsignUpメソッドを呼び出したいと思います。ユーザーIDを取得したら、別のメソッドnormalSignupMethodを呼び出す必要があります。完了ブロックが完了したらメソッドを呼び出す方法は?

[ConnectionObj signUp:user]; 
[helper normalSignupMethod:dict]; 

申し込み方法:

[MYRequest signUp:user successBlock:^(QBResponse *response, QBUUser *user) { 
    // Sign up was successful 
    // Store user id 
    [SingletonClass sharedMySingleton].userID = [NSString stringWithFormat:@"%@",response.data[@"id"]]; 

} errorBlock:^(QBResponse *response) { 
    // Handle error here 
    NSLog(@" error in creating session %@", response.error); 
    [SVProgressHUD showErrorWithStatus:NSLocalizedString(@"SignUp to Chat error!", nil)]; 
}]; 

このI Iが呼び出されたか:

dispatch_group_t group = dispatch_group_create(); 
     dispatch_group_async(group,dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0),^{ 
    NSLog(@"Block1"); 
    [ConnectionObj signUp:user]; 
}); 

dispatch_group_notify(group,dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0),^{ 

    NSLog(@"Group notify"); 
    [helper normalSignupMethod:dict]; 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     [SVProgressHUD dismiss]; 
    }); 
}); 

ブロック1が最初に実行し、その後グループが呼び出さ知らせます。しかし、私はnormalSignupMethodの終了後にuserIDを取得しています。 normalSignupMethodを呼び出す前にsignUpメソッドがuserIDを取得するのを待つ方法

+0

偶発的な複雑性を導入し、代理人を使用しない理由を教えてください。デリゲートを使用する場合、この問題は発生しません。 –

+0

'dispatch_group_enter'と' dispatch_group_leave'を使ってみましたか?最初の実行が完了するのを待つようにします。 – KhanXc

+0

'signUp:'メソッドの定義を含めませんでした。代わりに 'signUp:successBlock:errorBlock:'を指定しました。これはあなたが望む目的のためにブロック内の追加のものを呼び出すためのフックを与えます。 @ suhitと@ndocは、基本的にはどのように行くのかを示します。どんな派遣用のものでも私は非常に奇妙な気がします。 – Gero

答えて

4

signUp:successBlock要求リターン一度normalSignupMethodを呼び出し、それが成功したかどう呼ばれているチェックするBool完了値を渡すことができます。したがって、このようにメソッドの宣言を変更してください。

-(void)signUp:(QBUser*)user andHandler:(void (^)(BOOL result))completionHandler; 

その定義

-(void)signUp:(QBUser*)user andHandler:(void (^)(BOOL result))completionHandler { 
    [MYRequest signUp:user successBlock:^(QBResponse *response, QBUUser *user) { 
     [SingletonClass sharedMySingleton].userID = [NSString stringWithFormat:@"%@",response.data[@"id"]]; 
     completionHandler(YES); 
    } errorBlock:^(QBResponse *response) { 
     // Handle error here 
     NSLog(@" error in creating session %@", response.error); 
     [SVProgressHUD showErrorWithStatus:NSLocalizedString(@"SignUp to Chat error!", nil)]; 
     completionHandler(NO); 
    }]; 
} 

さて、このように、このメソッドを呼び出します。

3

は、あなたがこのようなあなたのsignUp方法でblockを作成することができますsuccessBlock

[MYRequest signUp:user successBlock:^(QBResponse *response, QBUUser *user) { 
     // Sign up was successful 
     // Store user id 
     [SingletonClass sharedMySingleton].userID = [NSString stringWithFormat:@"%@",response.data[@"id"]]; 

     //call the signup method 
     [helper normalSignupMethod:dict]; 

    } errorBlock:^(QBResponse *response) { 
     // Handle error here 
     NSLog(@" error in creating session %@", response.error); 
     [SVProgressHUD showErrorWithStatus:NSLocalizedString(@"SignUp to Chat error!", nil)]; 
    }]; 
関連する問題