我MVVM
也在我的 iOS 中使用范例RACSignal
。到目前为止,事情进展顺利。但是,我在订阅信号时遇到了问题。在第一次订阅时一切正常。然而,进一步的订阅不会。
编码
在我的viewModel
我有一个RACSignal
这样的声明:
视图模型.h
@property (strong, readonly, nonatomic) RACSignal *updatedContentSignal;
视图模型.m
@property (nonatomic, readwrite, strong) RACSubject *updatedContentSignal;
然后在 viewModel 中像这样初始化它designated initialiser
:
self.updatedContentSignal = [[RACSubject alloc]init];
然后,当我实际使用中的信号时,viewModel
我会做这样的事情:在 viewModel 的各个地方需要的地方——通常在 web 服务块方法中
[(RACSubject *)self.updatedContentSignal sendNext:nil];
[(RACSubject *)self.updatedContentSignal sendCompleted];
[(RACSubject *)self.updatedContentSignal sendError:error];
在viewController
我订阅这样的信号中:
[self.viewModel.updatedContentSignal subscribeNext:^(id x) {
} error:^(NSError *error) {
} completed:^{
}];
我订阅了一次信号viewDidLoad
所以一切都在第一次viewDidLoad
通话
问题
当我离开viewController
并返回它时,它viewWillAppear
会被调用,并且会viewModel
触发各种触发信号的方法:
[(RACSubject *)self.updatedContentSignal sendNext:nil];
[(RACSubject *)self.updatedContentSignal sendCompleted];
[(RACSubject *)self.updatedContentSignal sendError:error];
然而,viewController
不再接收信号。似乎它只适用于他第一次订阅。
有没有办法让信号在每次updateContent
调用/触发一个信号时继续工作?