【发布时间】:2016-08-25 06:44:22
【问题描述】:
我想先调用signUp方法,一旦我得到userID,我需要调用另一个方法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)];
}];
这就是我所说的:
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 完成后,我得到了用户 ID。如何在调用 normalSignupMethod 之前等待 signUp 方法获取 userID?
【问题讨论】:
-
为什么要引入意外的复杂性而不使用委托?如果您使用委托,则不会出现此问题。
-
您尝试过使用
dispatch_group_enter和dispatch_group_leave吗?这样它就等待第一次执行完成 -
您没有包含
signUp:方法的定义。您指定了signUp:successBlock:errorBlock:,它为您提供了一个挂钩,可以完全按照您想要的目的调用块中的其他内容。 @suhit 和 @ndoc 基本上会告诉你怎么走。做任何派遣的事情让我觉得很奇怪,跟随他们的领导
标签: ios objective-c multithreading block