RACCommand 有sendError对executionSignals 怎么破
RACCommand 一般我们都是放在ViewModel中,就像是一个Action,由用户或者View/ViewController的。
如果ViewController中是这么写的。 现在有这样一个需要,就是知道这个command什么时候被执行了。执行的结果是咋样的,是否有错误,或者完成,那么应该怎么办呢。 之前我是这么写的。 [[self.testBtn.rac_command executing] subscribeNext:^(NSNumber *executing) { [self.testBtn.rac_command.errors subscribeError:^(NSError *error)]{ [self.testBtn.rac_command.executionSignals flattenMap:^(RACSignal *exection){ 感觉没有问题,但是实际的问题来。就是在viewModel中sendError得话,那么3的位置是能够执行到得,但是我不期望的5也被执行了。跟踪之后,发现原来RACCommand里面本身会对error进行catch的然后concate 返回一个error的signal了。所以4中本来应该发现error直接出去的都变成了普通的return signal了。 google一下吧,看看有什么好的解决办法。发现使用materialize 和dematerialize的规避吧。materialize回家所有的信号封装成event的形势出去。这样RACCommand就拿不到error了。也就是说2处也不会有了。只有在需要的地方也就是我们的ViewController中使用dematerialize出来拿到我们实际想要的数据了。 改动不大。在ViewModel中1处成 然后在ViewController中,将3部分代码可以去掉了。executionSignals 的部分需要改成 这样,所有你想要的东西都可以得到了。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |