注册 登录
主题 : ios  想要在block结束之后调用reloadData
级别: 新手上路
UID: 603375
精华: 0
发帖: 8
可可豆: 35 CB
威望: 35 点
在线时间: 18(时)
注册时间: 2017-01-11
最后登录: 2017-12-13
0 楼:  发表于: 2017-10-08 19:56    发自: Web Page
来源于 一般提问 分类

ios  想要在block结束之后调用reloadData   

   for (int i = 0; i < self.dataArray.count; i++) {
        DYDeviceModel *object = self.dataArray;
        [[AlinkSDK sharedManager] invokeWithMethod:@"mtop.openalink.app.core.device.privatedata.retrieve" params:@{@"uuid":object.uuid, @"dataKey":@"colorType"} completionHandler:^(AlinkResponse * _Nonnull response) {

            if (response.successed) {
                NSString *lastColorType = [[response dataObject] objectForKey:@"dataString"];
                if (lastColorType == nil)  {
                    lastColorType = @“0”;
                }
                NSLog(@" %@", lastColorType);
                NSInteger type = [lastColorType integerValue];
                [self.selectedImage addObject:_colorArray[type]];
                //                [self.tableView reloadData];
            } else {
                NSInteger type = 0;
                [self.selectedImage addObject:_colorArray[type]];
                //                [self.tableView reloadData];

            }
        }];
    }
        [self.tableView reloadData];
想要在for循环的block调用结束之后,进行tableView reloadData, 但是尝试了很多种方法都没有成功,请求大神帮助
关键词: ios block reloadData
级别: 侠客
状态: 连续签到 - [26天]
UID: 489319
精华: 0
发帖: 139
可可豆: 338 CB
威望: 281 点
在线时间: 373(时)
注册时间: 2015-07-16
最后登录: 2017-12-11
1 楼:  发表于: 2017-10-09 08:30    发自: Web Page
调主线程刷新也不行么
级别: 版主

状态: 连续签到 - [83天]
UID: 519631
精华: 0
发帖: 797
可可豆: 1685 CB
威望: 1114 点
在线时间: 1609(时)
注册时间: 2015-11-02
最后登录: 2017-12-14
2 楼:  发表于: 2017-10-09 08:40    发自: Web Page
凡是异步的想要达到同步的效果,用信号量
级别: 新手上路
UID: 603375
精华: 0
发帖: 8
可可豆: 35 CB
威望: 35 点
在线时间: 18(时)
注册时间: 2017-01-11
最后登录: 2017-12-13
3 楼:  发表于: 2017-10-09 10:49    发自: Web Page
回 1楼(董其林) 的帖子
不行,没法保证for循环中的block全部执行完毕
级别: 新手上路
UID: 603375
精华: 0
发帖: 8
可可豆: 35 CB
威望: 35 点
在线时间: 18(时)
注册时间: 2017-01-11
最后登录: 2017-12-13
4 楼:  发表于: 2017-10-09 10:53    发自: Web Page
回 2楼(ad0ma) 的帖子
试过,信号量只保证了一层block的同步,但是最里面的block执行还是异步的,可能是我信号量用的不对
级别: 新手上路
UID: 509473
精华: 0
发帖: 8
可可豆: 26 CB
威望: 26 点
在线时间: 198(时)
注册时间: 2015-09-26
最后登录: 2017-11-02
5 楼:  发表于: 2017-10-09 11:09    发自: Web Page
为什么非要用for 循环呢?写一个方法在block里重复调用不就行了。
- (void)method:(id)i{
     DYDeviceModel *object = self.dataArray;
     [[AlinkSDK sharedManager] invokeWithMethod:@"mtop.openalink.app.core.device.privatedata.retrieve" params:@{@"uuid":object.uuid, @"dataKey":@"colorType"} completionHandler:^(AlinkResponse * _Nonnull response) {

             i ++;
             [self method:i];
            
        }];
}
这样应该是可行的啊
级别: 新手上路
UID: 509473
精华: 0
发帖: 8
可可豆: 26 CB
威望: 26 点
在线时间: 198(时)
注册时间: 2015-09-26
最后登录: 2017-11-02
6 楼:  发表于: 2017-10-09 11:11    发自: Web Page
回 5楼(Zljjayking) 的帖子
应该是DYDeviceModel *object = self.dataArra;
级别: 新手上路
UID: 509473
精华: 0
发帖: 8
可可豆: 26 CB
威望: 26 点
在线时间: 198(时)
注册时间: 2015-09-26
最后登录: 2017-11-02
7 楼:  发表于: 2017-10-09 11:12    发自: Web Page
回 6楼(Zljjayking) 的帖子
【i】显示不出来
级别: 侠客

状态: 连续签到 - [100天]
UID: 522856
精华: 0
发帖: 91
可可豆: 638 CB
威望: 432 点
在线时间: 850(时)
注册时间: 2015-11-12
最后登录: 2017-12-14
8 楼:  发表于: 2017-10-09 15:40    发自: Web Page
dispatch_group_t group = dispatch_group_create();
         for (int i = 0; i < self.dataArray.count; i++) {
        {
            dispatch_group_enter(group);
             DYDeviceModel *object = self.dataArray;
            [[AlinkSDK sharedManager] invokeWithMethod:@"mtop.openalink.app.core.device.privatedata.retrieve" params:@{@"uuid":object.uuid, @"dataKey":@"colorType"} completionHandler:^(AlinkResponse * _Nonnull response) {

            if (response.successed) {
                NSString *lastColorType = [[response dataObject] objectForKey:@"dataString"];
                if (lastColorType == nil)  {
                    lastColorType = @“0”;
                }
                NSLog(@" %@", lastColorType);
                NSInteger type = [lastColorType integerValue];
                [self.selectedImage addObject:_colorArray[type]];
                dispatch_group_leave(group);
            } else {
                NSInteger type = 0;
                [self.selectedImage addObject:_colorArray[type]];
                dispatch_group_leave(group);

            }
        }];
        }
        
        dispatch_group_notify(group, dispatch_get_main_queue(), ^{
            
            
          [self.tableView reloadData];
            
        });
级别: 新手上路
UID: 603375
精华: 0
发帖: 8
可可豆: 35 CB
威望: 35 点
在线时间: 18(时)
注册时间: 2017-01-11
最后登录: 2017-12-13
9 楼:  发表于: 2017-10-10 10:43    发自: Web Page
回 5楼(Zljjayking) 的帖子
高! 试了很多种方法,一直想要用信号量GCD来实现 结果不行,最后还是用的你这种相似的方法解决的
描述
快速回复

关注本帖(如果有新回复会站内信通知您)

发帖、回帖都会得到可观的积分奖励。查看论坛积分规则

按"Ctrl+Enter"直接提交
    顶部