gpt4 book ai didi

ios - 订阅 RACSignal 问题

转载 作者:行者123 更新时间:2023-11-29 01:25:33 26 4
gpt4 key购买 nike

我也在我的 iOS 中使用 MVVM 范例和 RACSignal。到目前为止,一切进展顺利。但是,我在订阅信号时遇到了问题。在第一次订阅时一切正常。但是,进一步的订阅不会。

代码

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

View 模型.h

@property (strong, readonly, nonatomic) RACSignal *updatedContentSignal;

viewModel.m

@property (nonatomic, readwrite, strong) RACSubject *updatedContentSignal;

然后在 viewModel 的 designated initialiser 中像这样初始化它:

self.updatedContentSignal = [[RACSubject alloc]init];

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

[(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 信号之一时继续工作?

最佳答案

由于您的代码不是很全面,我只能说信号将在完成后立即消除(通过 sendCompleted:sendError:)。

所以如果你想继续,你将只需要使用sendNext:
仅使用 sendCompleted,以防您想要表明它已不再使用。

SendError: 使用,以防您收到错误。所以在你的网络服务 block 中你需要这样的东西:

if(!error) {
sendNext:xxx;
} else {
sendError:error;
}

关于ios - 订阅 RACSignal 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34063427/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com