上图中的cacheType 实际应该是一个枚举类型,而你在使用时多加了个 * ,去掉就可以了, 如下这块:completed:^ (UIImage *im, NSError *error, SDImageCacheType type) {}

解决方案 »

  1.   

    找到问题了,SDWebImageCachType定义时不需要*符号
      

  2.   

    PS:另一个问题,因为是异步加载,所以通过上面的方法来把图片通过数组muarr传值,会导致下一个页面显示的图片与列表里显示的小图不相符,也就是顺序乱了。所以想到不通过回调,而是直接使用缓存来读取图片
    我想知道SDWebImage的默认缓存路径在哪里,还有如果不使用disk缓存,直接使用内存缓存的话,该怎么用呢?
      

  3.   


    如果数组在得到时是有序的,那么在显示数组中的图片时应该不会出现你说的列表顺序乱了。使用类似的第三方图片加载的库,一般都会提供一个占位的image, 也就是上面的函数中的placeholderImage. 在远程图片未被下载完显示之前,你先看到的会是这个占位的image, 当图片下载完成后会更新UI线程上更新这个image。 
      

  4.   

    如果数组在得到时是有序的,那么在显示数组中的图片时应该不会出现你说的列表顺序乱了。使用类似的第三方图片加载的库,一般都会提供一个占位的image, 也就是上面的函数中的placeholderImage. 在远程图片未被下载完显示之前,你先看到的会是这个占位的image, 当图片下载完成后会更新UI线程上更新这个image。 
    是的,有提供占位的Image,我想实现的效果是每个cell上排列三张图片,点击任一图片后,能通过scrollview来查看放大的图片。所以我想把图片放入数组中,这样就能直接读取了,但是因为异步的原因,会导致顺序出错,显示的图片和点击的图片不符。
      

  5.   

    如果数组在得到时是有序的,那么在显示数组中的图片时应该不会出现你说的列表顺序乱了。使用类似的第三方图片加载的库,一般都会提供一个占位的image, 也就是上面的函数中的placeholderImage. 在远程图片未被下载完显示之前,你先看到的会是这个占位的image, 当图片下载完成后会更新UI线程上更新这个image。 
    是的,有提供占位的Image,我想实现的效果是每个cell上排列三张图片,点击任一图片后,能通过scrollview来查看放大的图片。所以我想把图片放入数组中,这样就能直接读取了,但是因为异步的原因,会导致顺序出错,显示的图片和点击的图片不符。

    你是将cell中的三张图片放到一个数组中吗? 显示的图片和点击的图片不符是因为取的不对吧。如果能找到点击图片的下标索引去数组中去读取图片对象,应该是相对应的。你可以创建一个缓存对象NSArray 来保存已经加载出的图片///////创建缓存NSMutalbeArray 
    NSMutalbeArray *cacheImage = [NSMutableArray alloc] init];
    int count= yourImagescount; ///////
    for (int i=0; i<count; i++) {
             [cacheImage addObject:[NSNull null]];
    }上面是根据图片数组的大小创建的缓存对象,下面就是当异步加载出来图片后来替换相应的缓存对象
    if (image!=nil) {
           [cacheImage replaceObjectAtIndex:XXX withObject:image];
    }这样在显示大图时就可以从这个cacheImage中来取图片对象了
    UIImage *image= cacheImage[XXX];  ////XXX是当前点击的图片索引
    if (image==[NSNull null]) {   //////////说明还没有被异步加载完毕
          NSLog(@"image is loading");
    }else {
          NSLog(@"show image")
    }
      

  6.   

    如果数组在得到时是有序的,那么在显示数组中的图片时应该不会出现你说的列表顺序乱了。使用类似的第三方图片加载的库,一般都会提供一个占位的image, 也就是上面的函数中的placeholderImage. 在远程图片未被下载完显示之前,你先看到的会是这个占位的image, 当图片下载完成后会更新UI线程上更新这个image。 
    是的,有提供占位的Image,我想实现的效果是每个cell上排列三张图片,点击任一图片后,能通过scrollview来查看放大的图片。所以我想把图片放入数组中,这样就能直接读取了,但是因为异步的原因,会导致顺序出错,显示的图片和点击的图片不符。

    你是将cell中的三张图片放到一个数组中吗? 显示的图片和点击的图片不符是因为取的不对吧。如果能找到点击图片的下标索引去数组中去读取图片对象,应该是相对应的。你可以创建一个缓存对象NSArray 来保存已经加载出的图片///////创建缓存NSMutalbeArray 
    NSMutalbeArray *cacheImage = [NSMutableArray alloc] init];
    int count= yourImagescount; ///////
    for (int i=0; i<count; i++) {
             [cacheImage addObject:[NSNull null]];
    }上面是根据图片数组的大小创建的缓存对象,下面就是当异步加载出来图片后来替换相应的缓存对象
    if (image!=nil) {
           [cacheImage replaceObjectAtIndex:XXX withObject:image];
    }这样在显示大图时就可以从这个cacheImage中来取图片对象了
    UIImage *image= cacheImage[XXX];  ////XXX是当前点击的图片索引
    if (image==[NSNull null]) {   //////////说明还没有被异步加载完毕
          NSLog(@"image is loading");
    }else {
          NSLog(@"show image")
    }
    多谢大神指点,问题终于解决了