2017-05-03 80 views
0

如標題所示,在訂閱RACSubet的RACSignal內的主題上調用sendNext不會執行任何操作。什麼都不會發生。我已經驗證了第二個訂閱者總是收到sendNext值,而不是訂閱內部的訂閱者。在RACSignal訂戶不工作的情況下調用RACSubject的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."); 
    } 
}]; 
相關問題