我有array
个用户对象。我需要迭代这个数组,然后,对于每个用户,我需要根据用户ID提出获取数据的请求。此请求是异步请求(由于我无法使其同步)。以下是使用dispatch_group调用编辑的代码:
EDITED
for (User *user in self.userList) {
dispatch_group_enter(self.usersGroup);
[self.wrapper getUserDataWithId:user.userid completion:^(Owner *owner, NSError *error) {
user.owner = owner;
dispatch_group_leave(self.usersGroup);
}];
}
dispatch_group_notify(self.usersGroup, dispatch_get_main_queue(), ^{
// All requests have finished
// Stuff with updated userlist
});
主要问题很明显:当第一个请求完成时,它所引用的用户引用不是已启动请求的那个,因此我没有正确的关联。
有没有简单而优雅的方法来解决这个问题?提前谢谢!
答案 0 :(得分:0)
由于@ Paulw11建议循环不会等你执行该块,所以我建议你使用这样的递归函数而不是for循环。
- (void)getOwnerForObectAtIndex:(NSInteger)index {
if (index < self.userList) {
User *user = [self.userList objectAtIndex:index];
[self.wrapper getUserDataWithId:user.userid completion:^(Owner *owner, NSError *error) {
user.owner = owner;
[self getOwnerForObectAtIndex:index+1];
}];
}
else {
//Now all User have its corresponding owner, Handle array Now.
}
}
现在调用此函数,如[self getOwnerForObectAtIndex:0];