首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用RACSignal订阅问题

使用RACSignal订阅问题
EN

Stack Overflow用户
提问于 2015-12-03 10:25:21
回答 1查看 177关注 0票数 0

我也在我的iOS中使用RACSignalRACSignal范例。到目前为止一切都很顺利。然而,我在订阅信号时遇到了一个问题。在第一次订阅时,一切都很好。然而,进一步的订阅不会。

代码

在我的viewModel中,有一个RACSignal声明如下:

viewModel.h

代码语言:javascript
复制
@property (strong, readonly, nonatomic) RACSignal *updatedContentSignal;

viewModel.m

代码语言:javascript
复制
@property (nonatomic, readwrite, strong) RACSubject *updatedContentSignal;

然后像视图模型的designated initialiser那样初始化它:

代码语言:javascript
复制
self.updatedContentSignal = [[RACSubject alloc]init];

然后,当我在viewModel中实际使用信号时,我会做这样的事情:需要在viewModel中的不同地方--通常是在web服务块方法中。

代码语言:javascript
复制
[(RACSubject *)self.updatedContentSignal sendNext:nil];
[(RACSubject *)self.updatedContentSignal sendCompleted];
[(RACSubject *)self.updatedContentSignal sendError:error];

viewController中,我订阅了这样的信号:

代码语言:javascript
复制
[self.viewModel.updatedContentSignal subscribeNext:^(id x) {

    } error:^(NSError *error) {


    } completed:^{


    }];

我在viewDidLoad上订阅了一次信号

因此,所有这些都适用于第一个viewDidLoad调用。

问题

当我离开viewController并返回到它时,调用了viewWillAppearviewModel触发了触发信号的各种方法:

代码语言:javascript
复制
  [(RACSubject *)self.updatedContentSignal sendNext:nil];
    [(RACSubject *)self.updatedContentSignal sendCompleted];
    [(RACSubject *)self.updatedContentSignal sendError:error];

然而,viewController不再接收信号。它似乎只起作用,而不是他第一次订阅。

是否有一种方法,使该信号将继续工作,每次一个updateContent信号是呼叫/触发?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-05 00:37:46

由于您的代码不是很全面,所以我只能说,信号一完成(通过sendCompleted:sendError:)就会被排除。

因此,如果您想要继续,您必须只使用sendNext:

只使用sendCompleted,以防您想要显示它不再被使用。

如果收到错误,将使用SendError:。因此,在您的web服务块中,您需要这样的内容:

代码语言:javascript
复制
if(!error) {
    sendNext:xxx; 
} else {
    sendError:error;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34063427

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档