2017-05-03 1 views
0

を動作していないRACSignal加入の内側RACSubjectのsendNextを呼び出すには、何もしません。何も起こらない。私は2番目のサブスクライバがsendNextの値を常に受け​​取ることを確認しました。ちょうどその呼び出しがサブスクライブ中に行われたものではありません。RACSubetに加入RACSignal内部の被写体にsendNextを呼び出して、タイトルが言うように

コード:

セットアップ

loginStateSubject = [RACSubject subject]; 
loginStateSignal = [loginStateSubject replayLast]; 
[loginStateSubject sendNext:[NSNumber numberWithInteger:LOGIN_IDLE]]; 

加入者

[[loginStateSignal takeWhileBlock:^BOOL(NSNumber *state) { 
    if ([state intValue] == LOGGING_IN) { 
     NSLog(@"Login state is in LOGGING_IN. Complete subscriber."); 
     return false; 
    } 

    return true; 
}] subscribeNext:^(NSNumber *state) { 
    if ([state intValue] == LOGIN_IDLE) { 
     NSLog(@"Login Idle. Attempt login."); 
     [loginStateSubject sendNext:[NSNumber numberWithInt:LOGGING_IN]]; 
     [self loginWithParse];   
    } else { 
     NSLog(@"Log out in process while attempting to log in."); 
    } 
}]; 

答えて

0

私は自分の質問に答えることを憎むが、私は解決策を見つけました。何らかの理由で、subscribeOnとobserveOnを定義する必要がありました。私は彼らが私のケースのメインスレッドでは現在のスレッドにデフォルトすると仮定しましたが、何か特定のものが必要だったようです。

回答:

[[[[loginStateSignal 
subscribeOn:[RACScheduler mainThreadScheduler]] 
deliverOn:[RACScheduler mainThreadScheduler]] 
takeWhileBlock:^BOOL(NSNumber *state) { 
    if ([state intValue] == LOGGING_IN) { 
     NSLog(@"Login state is in LOGGING_IN. Complete subscriber."); 
     return false; 
    } 

    return true; 
}] subscribeNext:^(NSNumber *state) { 
    if ([state intValue] == LOGIN_IDLE) { 
     NSLog(@"Login Idle. Attempt login."); 
     [loginStateSubject sendNext:[NSNumber numberWithInt:LOGGING_IN]]; 
     [self loginWithParse];   
    } else { 
     NSLog(@"Log out in process while attempting to log in."); 
    } 
}]; 
関連する問題