Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.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
Ios 错误后如何重新订阅RACSignal_Ios_Objective C_Reactive Cocoa - Fatal编程技术网

Ios 错误后如何重新订阅RACSignal

Ios 错误后如何重新订阅RACSignal,ios,objective-c,reactive-cocoa,Ios,Objective C,Reactive Cocoa,我有一个简单的subscribeNext:error:chain-like: [[self.viewModel signal] subscribeNext:^(id x) { NSLog(@"success!"); } error:^(NSError *error) { NSLog(@"error"); }]; 当我收到一个错误时,我成功地打印了这个错误,但是看起来这个链似乎再也不会被调用了,即使这个信号在错误发生后再次从视图模型发送。我似乎不知道在错误触发后如何使用-retr

我有一个简单的subscribeNext:error:chain-like:

[[self.viewModel signal] subscribeNext:^(id x) {
    NSLog(@"success!");
} error:^(NSError *error) {
    NSLog(@"error");
}];
当我收到一个错误时,我成功地打印了这个错误,但是看起来这个链似乎再也不会被调用了,即使这个信号在错误发生后再次从视图模型发送。我似乎不知道在错误触发后如何使用-retry或-repeat重新订阅。有什么帮助吗?谢谢

您需要:

你需要:


好的!我找到了答案:您需要用catch块捕获错误,返回带有错误的RACSignal,然后重试,然后订阅成功回调的下一步。比如:

[[[[self.viewModel signal] catch:^RACSignal *(NSError *error) {
    // Handle the error here
    return [RACSignal error:error];
}] retry] subscribeNext:^(id x) {
    // Do your success stuff
}];

好的!我找到了答案:您需要用catch块捕获错误,返回带有错误的RACSignal,然后重试,然后订阅成功回调的下一步。比如:

[[[[self.viewModel signal] catch:^RACSignal *(NSError *error) {
    // Handle the error here
    return [RACSignal error:error];
}] retry] subscribeNext:^(id x) {
    // Do your success stuff
}];
如果将-catch:放入-flattmap:,则外部信号不会出错。

如果将-catch:放在-flattmap:内,则外部信号不会出错。

这似乎对我不起作用,如果我将重试添加到信号中,它甚至不是第一次调用!如果有问题,viewModel中的RACSignal将被发送错误,如:[RACSubject*self.signal sendError:error];这似乎对我不起作用,如果我将重试添加到信号中,它甚至不是第一次调用!如果有问题,viewModel中的RACSignal将被发送错误,如:[RACSubject*self.signal sendError:error];