Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 按下按钮取消以前的请求后,从rac_GET创建rac信号_Cocoa_Reactive Cocoa - Fatal编程技术网

Cocoa 按下按钮取消以前的请求后,从rac_GET创建rac信号

Cocoa 按下按钮取消以前的请求后,从rac_GET创建rac信号,cocoa,reactive-cocoa,Cocoa,Reactive Cocoa,读完教程后,我正在尝试我的第一个练习。目标是让一个按钮使用AFNetworking和这些工具从互联网上下载一些东西 我想到了这个: AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; manager.responseSerializer.acceptableContentTypes = nil; RACSignal *buttonSignal = [self.stepperButton

读完教程后,我正在尝试我的第一个练习。目标是让一个按钮使用AFNetworking和这些工具从互联网上下载一些东西

我想到了这个:

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.responseSerializer.acceptableContentTypes = nil;
RACSignal *buttonSignal = [self.stepperButton rac_signalForControlEvents:UIControlEventTouchUpInside];
RACSignal *getSignal = [buttonSignal map:^id(UIButton *button) {
    return [manager rac_GET:@"https://farm3.staticflickr.com/2815/13668440264_e6403b3100_o_d.jpg" parameters:nil];
}];
RACSignal *latestSignal = [getSignal switchToLatest];
[latestSignal subscribeNext:^(id x) {
    NSLog(@"x: %@",x);
}];
这似乎做了我想要的几件事:

  • 它会根据请求从flickr下载图像
  • 当点击按钮太快时,会取消上一个请求(此处的键是switchToLatest)
  • 但它在其他方面失败了:

  • 在我的订阅文本中,我似乎无法得到有效的回复
    x
    总是
    null
  • 当请求失败时,信号进入错误状态,按下按钮不会再触发任何新GET
  • 我想我在这里错过了很多东西,因为我是一个新手,但也许有人愿意给我一些提示,让我走上正确的方向

    还有其他我看不到的方法吗?

    这似乎有效:

    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    manager.responseSerializer = [AFHTTPResponseSerializer serializer];
    manager.responseSerializer.acceptableContentTypes = nil;
    RACSignal *buttonSignal = [self.stepperButton rac_signalForControlEvents:UIControlEventTouchUpInside];
    RACSignal *getSignal = [buttonSignal map:^id(UIButton *button) {
        return [[manager rac_GET:@"https://farm3.staticflickr.com/2815/13668440264_e6403b3100_o_d.jpg" parameters:nil] catch:^RACSignal *(NSError *error) {
            NSLog(@"catch %@",error);
            return [RACSignal empty];
        }];
    }];
    RACSignal *latestSignal = [getSignal switchToLatest];
    [latestSignal subscribeNext:^(NSData *data) {
        NSLog(@"dowloaded %d bytes",data.length);
    }];
    
    谢谢你提出类似的问题!强大的东西

    捕获物应该在rac_GET上。之前,我一直试图用catch做一些事情,但是在
    按钮信号管道上

    x
    总是
    null
    的原因是我没有在
    管理器上设置序列化程序

    我想删除这个问题,但也许还有人对解决方案有意见