[iOS开发]RAC实现图片下载功能

RAC实现图片下载功能

在实现异步RAC下载图片的过程当中,须要注意如下几点:网络

  •  经过 NSURLConnection 对象的 +(RACSignal *)rac_sendAsynchronousRequest:(NSURLRequest*)r 能够建立网络异步下载的信号量对象;异步

  •  在执行完成异步下载过程后,须要经过 [x deliverOn:[RACScheduler mainThreadScheduler]] 操做将方法返回到主线程进行执行;url

@implementation ViewController
{
    RACCommand  *loginCommand;
    RACSignal   *loginSignal;
}


- (void)awakeFromNib
{
    //建立网络图片下载的URL对象
    NSURL *url = [NSURL URLWithString:@"http://pica.nipic.com/2007-11-09/2007119124513598_2.jpg"];
    
    //建立网络图片请求对象
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    
    //实例化命令操做对象
    loginCommand = [[RACCommand alloc] initWithSignalBlock:^(id sender) {
        
        //经过NSURLConnection的+方法,建立异步返回信号量
        return [NSURLConnection rac_sendAsynchronousRequest:request];
    }];
    
    
    //信号量完成后的插座操做
    [loginCommand.executionSignals subscribeNext:^(RACSignal *x)
    {
        //将下载完成的图片数据转换成图片对象后,在主线程赋值给imageView属性
        [[x deliverOn:[RACScheduler mainThreadScheduler]] subscribeNext:^(RACTuple *tuple)
         {
             NSData *imageData = tuple.last;
             
             //imageView - UIImageView
             self.imageView.image = [UIImage imageWithData:imageData];

         }];
    }];
}
- (void)viewDidLoad {
    [super viewDidLoad];
    //指定触发命令操做
    //btn - UIButton
    self.btn.rac_command = loginCommand;
}
@end
相关文章
相关标签/搜索