gpt4 book ai didi

ios - ReactiveCocoa,RACCommand 显示消息或完成后执行 segue

转载 作者:行者123 更新时间:2023-11-28 21:45:39 25 4
gpt4 key购买 nike

我将 RACCommand 用于我的 UI 按钮单击事件。我正在使用 MVVM 架构。在我的 ViewModel 中,我有这个:

@property (strong, nonatomic) RACCommand *executeRegistration;

在“init”里面我有这个:

self.executeRegistration = [[RACCommand alloc] initWithSignalBlock:^RACSignal *(id input)
{
return [self executeSearchSignal];
}];

执行搜索信号是这样的:

- (RACSignal *)executeSearchSignal {
return [[[self.services insertUserRegistration]
registerUserName:self.userName]
logAll];
}

我的“[self.services insertUserRegistration] registerUserName:self.userName”是这样的:

 @weakify(self);
return [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber)
{
@strongify(self);

Manager *manager = [Manager sharedManager];
manager._delegate = self;

RACSignal *successSignal =
[self rac_signalForSelector:@selector(manager:didSuccesWithoutError:)
fromProtocol:@protocol(ManagerDelegate)];

RACSignal *failSignal =
[self rac_signalForSelector:@selector(manager:didFailWithError:)
fromProtocol:@protocol(ManagerDelegate)];

[[successSignal map:^id(RACTuple *tuple)
{
return tuple.second;
}] subscribeNext:^(id x) {
[subscriber sendNext:x];
[subscriber sendCompleted];
}];

[[failSignal map:^id(RACTuple *tuple)
{
return tuple.second;
}] subscribeNext:^(id x) {
[subscriber sendError:x];
}];

[manager insertUserRegistration:name];
return nil;
}];

我的 ViewController 在 BindViewModel 方法中有这个:

[self.finishRegistrationButton.rac_command.executionSignals subscribeNext:^(RACSignal *loginSignal) {
// Log a message whenever we log in successfully.
[loginSignal subscribeCompleted:^{
NSLog(@"I'm here.");
}];
}];

self.finishRegistrationButton.rac_command = self.viewModel.executeRegistration;

通过我的“logAll”属性,我可以看到一切都在执行,问题是在一切正常之后它永远不会进入 subsrcibeCompleted。如果出现错误,我想显示错误消息,如果一切正常,我想执行 segue。我究竟做错了什么?你能解释一下如何正确地做到这一点吗?我现在被困在这里很长一段时间了。

最佳答案

我做到了。 RACCommand“没有订阅错误”。发送的信号不包括错误事件。存在特殊属性“错误”。在该属性中,发送错误的每个信号都是“下一个”。所以,解决方案是使用这个:

[self.executeRegistration.executionSignals subscribeNext:^(RACSignal *signal){
[signal subscribeCompleted:^{
NSLog(@"Registered");
}];
}];

[self.executeRegistration.errors subscribeNext:^(id x) {
NSLog(@"Error");
}];

没关系。如果您不想要每个新值,则无需 subscribeNext。这实际上是非常酷的东西,但我读到它太令人困惑了,为什么它不像经典实现那样发送错误(对我来说:))。如果我没记错的话,那将包含在 3.0 中。

关于ios - ReactiveCocoa,RACCommand 显示消息或完成后执行 segue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30313335/

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