SDWebImage使用汇总

2017年2月10日
1.如何保存缓存图片
用如下方法,可能会不成功
原因:对象消失,无法进入block块进行存储。

+ (void)setNurseDefualtImage
{
    NSString *fieldId = [[NSUserDefaults standardUserDefaults]objectForKey:@"nurseId_image"];

    NSString *key = [NSString stringWithFormat:@"%@%@",[QNInfo sharedQNInfo].QNImageUrl ? [QNInfo sharedQNInfo].QNImageUrl : quanQuanImageUrl, fieldId];
    //不能用局部变量,对象会变成nil,直接return导致下面block接口没有进去
    UIImageView *headPortraitImage = [[UIImageView alloc]init];
    [headPortraitImage sd_setImageWithURL:[NSURL URLWithString:key] completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {

        NSString *nurseId = [[NSUserDefaults standardUserDefaults]objectForKey:@"nurseId"];
        NSString *key = [NSString stringWithFormat:@"%@_head",nurseId];

        if(image){
            [[SDImageCache sharedImageCache] removeImageForKey:key];
            [[SDImageCache sharedImageCache] storeImage:image forKey:key];
            [[SDImageCache sharedImageCache] defaultCachePathForKey:key];
        }
    }];
}

解决:改成用如下成员变量就可以(最好在朱页面创建的时候使用,不然页面销毁太快,对象变空后,就无法进入block了)

#import "MainViewController.h"
#import "UIImageView+WebCache.h"
@interface  MainViewController ()
{
     UIImageView *headPortraitImage;//用来下载默认图片用
}
@end
@implementation loginViewController
- (void)viewDidLoad
{
      headPortraitImage = [[UIImageView alloc] init];
}
- (void)setNurseDefualtImage
{
    NSString *fieldId = [[NSUserDefaults standardUserDefaults]objectForKey:@"nurseId_image"];

    NSString *key = [NSString stringWithFormat:@"%@%@",[QNInfo sharedQNInfo].QNImageUrl ? [QNInfo sharedQNInfo].QNImageUrl : quanQuanImageUrl, fieldId];
    [headPortraitImage sd_setImageWithURL:[NSURL URLWithString:key] completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {

        NSString *nurseId = [[NSUserDefaults standardUserDefaults]objectForKey:@"nurseId"];
        NSString *key = [NSString stringWithFormat:@"%@_head",nurseId];

        if(image){
            [[SDImageCache sharedImageCache] removeImageForKey:key];
            [[SDImageCache sharedImageCache] storeImage:image forKey:key];
            [[SDImageCache sharedImageCache] defaultCachePathForKey:key];
        }
    }];
}

- (void)loginBtnClick:(UIButton *)btn
{
      //请求默认护士头像图片
      [self setNurseDefualtImage];
}

@end

如果您发现本文对你有所帮助,如果您认为其他人也可能受益,请把它分享出去。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,156评论 1 32
  • iOS网络架构讨论梳理整理中。。。 其实如果没有APIManager这一层是没法使用delegate的,毕竟多个单...
    yhtang阅读 5,294评论 1 23
  • 今天是周六,吃过早饭没多一会,我就说:“行动起来吧!打扫卫生、写作业、洗衣服,选一样吧!”爷俩都笑了:“...
    水情1207阅读 281评论 0 0
  • 记得有人说过:“女人化妆是给女人看的”,嗯,我看着真好看。前几天在刷聚美优品的时候看到了一个小姐姐,差一点我就被掰...
    爱读书的兔兔阅读 1,489评论 0 7
  • 郑恒年,江山人,住东门,郑调元三子,咸丰二年壬子科举人。 《戊午纪事六百言》 畴昔谈丧乱,佥云语捕风。不信丁戹运,...
    莲子风父抱石人阅读 227评论 0 1