Tôi đang triển khai mã đầu tiên của mình với https://github.com/ReactiveCocoa/ReactiveCocoa.Tại sao tín hiệu được gọi hai lần trong ReactiveCocoa?
Dành cho đăng nhập người dùng. Dòng [subscriber sendNext:user];
được gọi là hai lần, nhưng tôi hy vọng sẽ chỉ có một. Và bản đồ không được gọi là ở tất cả (vì vậy AutoLogin không bao giờ được gọi là)
Đây là triển khai thực hiện của tôi:
-(RACSignal *) login:(NSString *)email pwd:(NSString *)pwd
{
DDLogInfo(@"Login user %@", email);
RACSignal *login = [RACSignal createSignal:^ RACDisposable *(id<RACSubscriber> subscriber)
{
[PFUser logInWithUsernameInBackground:email password:pwd block:^(PFUser *user, NSError *error) {
if (error) {
[subscriber sendError:error];
} else {
[subscriber sendNext:user];
[subscriber sendCompleted];
}
}];
return nil;
}];
[login map:^(PFUser *user) {
return [self autoLogin:user];
}];
return login;
}
Được gọi theo cách này:
NSString *email = data[@"email"];
NSString *pwd = data[@"pwd"];
[SVProgressHUD showWithMaskType:SVProgressHUDMaskTypeBlack];
RACSignal *login = [[SyncEngine server] login:email pwd:pwd];
[login
subscribeCompleted:^
{
[[NSNotificationCenter defaultCenter]
postNotificationName:NOTIFY_LOGIN_CHANGED
object:self];
[SVProgressHUD showSuccessWithStatus:LOC_OK];
[self cancelForm];
}];
[login
subscribeError:^(NSError *error)
{
[SVProgressHUD dismiss];
[AppUrls alertError:LOC_ERROR_LOGING msg:error.userInfo[@"error"]];
}];
Một bước qua mã và xem điều gì đang xảy ra. Hoặc đặt điểm ngắt tại mục nhập để gửiNext và kiểm tra ngăn xếp cuộc gọi mỗi khi được gọi. –