美文网首页
iOS - 如何让for循环中的block执行完再进行下次循环?

iOS - 如何让for循环中的block执行完再进行下次循环?

作者: HanZhiZzzzz | 来源:发表于2019-04-11 16:18 被阅读0次

//01>>全局变量group

dispatch_group_t group = dispatch_group_create();
             
             //循环读取用户数据
             for (Department *department in resultArr) {
                 //02>>进入组(进入组和离开组必须成对出现, 否则会造成死锁)
                 dispatch_group_enter(group);
                 [userApi get_u_all_by_dep_id:u_id access_token:access_token dep_id:department.id Succeed:^(User_utd *resultModel) {
                     
                     User_utd *user_utd=resultModel;
                     [db createTableAndIndexesOfName:NSStringFromClass(Simple_user.class) withClass:Simple_user.class];
                     [db insertOrReplaceObjects:user_utd.user into:NSStringFromClass(Simple_user.class)];
                     
                     [db createTableAndIndexesOfName:NSStringFromClass(User_to_dep.class) withClass:User_to_dep.class];
                     [db insertOrReplaceObjects:user_utd.utd into:NSStringFromClass(User_to_dep.class)];
                     
                     //03>>进入组(进入组和离开组必须成对出现, 否则会造成死锁)
                     dispatch_group_leave(group);
                     
                     
                 } failure:^(NSError *error) {
                     
                 }];
             }
             //04>>当执行for循环的时候,一次次执行异步任务下载数据,只有当这两个异步任务都执行完毕了才会执行dispatch_grout_notify方法。
             dispatch_group_notify(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
                 //读取完数据之后,再将部门,用户,标记插入。
                 [self insertDepartment:resultArr andUtd_mark:arrayUtd_mark intoconnectionArr:connectionArr db:db];
                 refreshArchive.d=refreshDB.d;
                 [archiveTools saveRefresh:refreshArchive];
             }); 

摘自:http://www.cocoachina.com/bbs/read.php?tid-1710923-page-2.html

相关文章

网友评论

      本文标题:iOS - 如何让for循环中的block执行完再进行下次循环?

      本文链接:https://www.haomeiwen.com/subject/duxxwqtx.html