注册 登录
主题 : ios  想要在block结束之后调用reloadData
级别: 新手上路
UID: 603375
精华: 0
发帖: 8
可可豆: 35 CB
威望: 35 点
在线时间: 8(时)
注册时间: 2017-01-11
最后登录: 2017-10-17
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
级别: 侠客
状态: 连续签到 - [20天]
UID: 489319
精华: 0
发帖: 131
可可豆: 296 CB
威望: 257 点
在线时间: 349(时)
注册时间: 2015-07-16
最后登录: 2017-10-18
1 楼:  发表于: 2017-10-09 08:30    发自: Web Page
调主线程刷新也不行么
级别: 版主

状态: 连续签到 - [82天]
UID: 519631
精华: 0
发帖: 731
可可豆: 1605 CB
威望: 1047 点
在线时间: 1416(时)
注册时间: 2015-11-02
最后登录: 2017-10-18
2 楼:  发表于: 2017-10-09 08:40    发自: Web Page
凡是异步的想要达到同步的效果,用信号量
级别: 新手上路
UID: 603375
精华: 0
发帖: 8
可可豆: 35 CB
威望: 35 点
在线时间: 8(时)
注册时间: 2017-01-11
最后登录: 2017-10-17
3 楼:  发表于: 2017-10-09 10:49    发自: Web Page
回 1楼(董其林) 的帖子
不行,没法保证for循环中的block全部执行完毕
级别: 新手上路
UID: 603375
精华: 0
发帖: 8
可可豆: 35 CB
威望: 35 点
在线时间: 8(时)
注册时间: 2017-01-11
最后登录: 2017-10-17
4 楼:  发表于: 2017-10-09 10:53    发自: Web Page
回 2楼(ad0ma) 的帖子
试过,信号量只保证了一层block的同步,但是最里面的block执行还是异步的,可能是我信号量用的不对
级别: 新手上路
UID: 509473
精华: 0
发帖: 8
可可豆: 26 CB
威望: 26 点
在线时间: 182(时)
注册时间: 2015-09-26
最后登录: 2017-10-18
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 点
在线时间: 182(时)
注册时间: 2015-09-26
最后登录: 2017-10-18
6 楼:  发表于: 2017-10-09 11:11    发自: Web Page
回 5楼(Zljjayking) 的帖子
应该是DYDeviceModel *object = self.dataArra;
级别: 新手上路
UID: 509473
精华: 0
发帖: 8
可可豆: 26 CB
威望: 26 点
在线时间: 182(时)
注册时间: 2015-09-26
最后登录: 2017-10-18
7 楼:  发表于: 2017-10-09 11:12    发自: Web Page
回 6楼(Zljjayking) 的帖子
【i】显示不出来
级别: 侠客

状态: 连续签到 - [94天]
UID: 522856
精华: 0
发帖: 89
可可豆: 610 CB
威望: 416 点
在线时间: 796(时)
注册时间: 2015-11-12
最后登录: 2017-10-18
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 点
在线时间: 8(时)
注册时间: 2017-01-11
最后登录: 2017-10-17
9 楼:  发表于: 2017-10-10 10:43    发自: Web Page
回 5楼(Zljjayking) 的帖子
高! 试了很多种方法,一直想要用信号量GCD来实现 结果不行,最后还是用的你这种相似的方法解决的
描述
快速回复

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

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

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