RAC实现图片下载功能
在实现异步RAC下载图片的过程中,需要注意以下几点:
• 通过 NSURLConnection 对象的 +(RACSignal *)rac_sendAsynchronousRequest:(NSURLRequest*)r 可以创建网络异步下载的信号量对象;
• 在执行完成异步下载过程后,需要通过 [x deliverOn:[RACScheduler mainThreadScheduler]] 操作将方法返回到主线程进行执行;
@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