2
我正在製作一個簡單的iOS應用程序來學習ReactiveCocoa。直到現在我一直在使用XIB文件,但決定切換到故事板。 在我的第一個視圖中,我有登錄屏幕,當用戶按下按鈕時,viewModel執行RACCommand來認證用戶並下載他的聯繫人列表。之後,我需要從ViewController調用performSegueWithIdentifier:
來顯示下載的數據。如何在ViewController中通知viewModel成功完成其操作?ViewModel完成操作時在ViewController中的通知
下面是從視圖控制器代碼片段:
RAC(self.viewModel, username) = self.usernameTextField.rac_textSignal;
RAC(self.viewModel, password) = self.passwordTextField.rac_textSignal;
self.loginButton.rac_command = self.viewModel.executeSignin;
,並從其視圖模型片段:
////////////////////////////////IN INIT////////////////////////////////////
self.executeSignin =
[[RACCommand alloc] initWithEnabled:validAuthenticateSignal
signalBlock:^RACSignal *(id input) {
return [self executeSigninSignal];
}];
//////////////////////////////////////////////////////////////////////////
-(RACSignal *)executpsigninsignal {
return [[[self.services getAuthenticationService]
authenticationSignalFor:self.username andPassword:self.password]
//Return user if exists
flattenMap:^RACStream *(STUser *user) {
return [[[[[self services] getContactsLoadService]
contactsLoadSignalForUser:user] deliverOn:[RACScheduler mainThreadScheduler]]
//Return user contacts
doNext:^(NSArray *contacts) {
_downloadedContacts = [NSArray arrayWithArray:contacts];
}];
}];
}
我也試圖觀察的ViewController的ViewModels downloadedContacts屬性:
RACSignal *contactsLoadSignal = RACObserve(self.viewModel, downloadedContacts);
[[contactsLoadSignal filter:^BOOL(NSArray *value) {
return value!=nil && value.count>0;
}]subscribeNext:^(NSArray *array) {
[self performSegueWithIdentifier:@"pushContactsList" sender:self];
}];
但這似乎不起作用,並不真正看起來不錯。