就是一个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];
    }
}

解决方案 »

  1.   

    因为是通过id请求数据的啊,一个id 对应一条图片数据,我要拿10张图片数据,不循环发送请求怎么弄?那如果要更多图片呢?
      

  2.   

    因为是异步请求,但是for循环可不会等你异步请求完成了再循环下一次,所以就会是这种情况
      

  3.   

    那只能在一个请求的完成block中 就是你打印i的位置 再发送下一次请求
      

  4.   

    那只能在一个请求的完成block中 就是你打印i的位置 再发送下一次请求一般多张图片的网络请求 都是异步完成的 不知道你要求 一张接着一张是满足什么需求
      

  5.   

    几乎同时顺序发出来请求,按原顺序返回的可能性是很小的,lz应该多了解一下http协议。
    推荐两种解决方案:
    1、你可以选择收到第一个response后再发第二个请求,以此类推
    2、同时发多个请求并且控制同时请求的最大数量。
      

  6.   

    我是请求新闻列表,每一条新闻对应一张图片,每张图片只能通过id请求,一次不能请求多张啊,我除了在for里面循环请求那还有什么办法?