【发布时间】:2015-05-18 21:48:36
【问题描述】:
我正在为我的 UI 按钮单击事件使用 RACCommand。我正在使用 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。我究竟做错了什么?你能解释一下如何正确地做到这一点吗?我被困在这里很长一段时间了。
【问题讨论】:
标签: ios objective-c mvvm reactive-cocoa