ios问题,哪位大神来帮我看看block的问题

142xy 2017-04-10 10:18:18

就是一个for循环里面有block,但block是异步的,我打印了一下,block里面的i并不是0.1.2.3....,每次都不一样,怎么解决。直接上代码
//获得图片数据
- (void) getImageData{
__block int count=0;
_newsImage = [NSMutableArray arrayWithCapacity:10];
__weak typeof(self) weakSelf = self;
for (int i = 0; i<self.newsID.count; i++) {

MNewsImgRequest *imageRequest = [[MNewsImgRequest alloc] init];
imageRequest.newsID = self.newsID[i];
// int index=i;
[SZWebService sendMyRequest:imageRequest WithRequestName:NSStringFromClass([imageRequest class]) completionHandler:^(MResponse *resp) {

NSLog(@"---%d",i);
if(resp.status == MResponseStatusSuccess) {
//应答无误,处理数据更新画面
count++;
MNewsImgResponse *imageResponse = (MNewsImgResponse *)resp;

UIImage *image = [UIImage imageWithWebPData:imageResponse.imageData ];

if (image != nil) {
[weakSelf.newsImage addObject:image];
}

// _newsImage[index]=image;

if (count == weakSelf.newsID.count) {
[weakSelf.tableView reloadData];
}
}else{
//应答错误,显示错误信息
NSLog(@"图片数据错误信息是:%@",resp.message);
}

}isRepeat:NO];
}
}
...全文
394 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
142xy 2017-04-19
  • 打赏
  • 举报
回复
引用 9 楼 waterhexuan 的回复:
引用 8楼编天码地 的回复:
引用 6楼我是你的主体 的回复:
那怎样才能让他执行完一次循环再执行下一次循环呢
那只能在一个请求的完成block中 就是你打印i的位置 再发送下一次请求
一般多张图片的网络请求 都是异步完成的 不知道你要求 一张接着一张是满足什么需求
我是请求新闻列表,每一条新闻对应一张图片,每张图片只能通过id请求,一次不能请求多张啊,我除了在for里面循环请求那还有什么办法?
编天码地 2017-04-14
  • 打赏
  • 举报
回复
引用 8楼编天码地 的回复:
引用 6楼我是你的主体 的回复:
那怎样才能让他执行完一次循环再执行下一次循环呢
那只能在一个请求的完成block中 就是你打印i的位置 再发送下一次请求
一般多张图片的网络请求 都是异步完成的 不知道你要求 一张接着一张是满足什么需求
编天码地 2017-04-14
  • 打赏
  • 举报
回复
引用 6楼我是你的主体 的回复:
那怎样才能让他执行完一次循环再执行下一次循环呢
那只能在一个请求的完成block中 就是你打印i的位置 再发送下一次请求
tangqihangtqhtqh 2017-04-14
  • 打赏
  • 举报
回复
几乎同时顺序发出来请求,按原顺序返回的可能性是很小的,lz应该多了解一下http协议。 推荐两种解决方案: 1、你可以选择收到第一个response后再发第二个请求,以此类推 2、同时发多个请求并且控制同时请求的最大数量。
142xy 2017-04-13
  • 打赏
  • 举报
回复
那怎样才能让他执行完一次循环再执行下一次循环呢
生命的气球 2017-04-13
  • 打赏
  • 举报
回复
因为是异步请求,但是for循环可不会等你异步请求完成了再循环下一次,所以就会是这种情况
编天码地 2017-04-12
  • 打赏
  • 举报
回复
异步执行 本来就不可能是0,1,2,3啊
142xy 2017-04-11
  • 打赏
  • 举报
回复
后台不能改了,是掉别人的接口
xttxqjfg 2017-04-10
  • 打赏
  • 举报
回复
将所有的id给后台一次请求不行?这逻辑。。
142xy 2017-04-10
  • 打赏
  • 举报
回复
因为是通过id请求数据的啊,一个id 对应一条图片数据,我要拿10张图片数据,不循环发送请求怎么弄?那如果要更多图片呢?
TNPxiaye 2017-04-10
  • 打赏
  • 举报
回复
为什么要发这么多请求 给后台说一次给发过去 返回数据不就得了嘛 你这样开了很多个请求啊 大兄弟

29,027

社区成员

发帖
与我相关
我的任务
社区描述
主要讨论与iOS相关的软件和技术
社区管理员
  • iOS
  • 大熊猫侯佩
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧