2017-05-25 124 views
0

大家好我有一個奇怪的問題,我在綁定方法推杆驗證碼:當觀察項目的值改變時,RACObserve subscribeNext沒有執行?

[RACObserve(self.viewModel,contacts) subscribeNext:^(id x) { 
    [self.contactsTableView reloadData]; 
}]; 

但是當我的視圖模型的接觸改變,subscribeNext沒有執行! ,我檢查了是否通過調試改變了值,並且它正常改變了!

這是其價值在我看來模型(簡體)改爲:
我這裏initilized它:

- (instancetype)init { 

    self.contacts = [[NSMutableArray <Contact *> alloc]init]; 

} 

,並改變了這裏

#pragma mark - load and filter methods 
    - (RACCommand *)loadContactsCommand { 
     ContactsNetworkManager *contactNetworkManager = [ContactsNetworkManager sharedManager]; 
     return [[RACCommand alloc] initWithSignalBlock:^RACSignal *(id input) { 
      return [[contactNetworkManager getAllContactsSignal] map:^id(NSMutableArray<Contact *> * value) { 
       NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"firstName" ascending:YES]; 
       [value sortUsingDescriptors:[NSArray arrayWithObject:descriptor]]; 
       [_contacts removeAllObjects]; 
       [_contacts arrayByAddingObjectsFromArray:value]; 
       return value; 
      }]; 
     }]; 
    } 

    #pragma mark - Actions 
    - (void)loadContacts { 
     [self.loadContactsCommand execute:nil]; 

    } 
    @end 

回答

0

找到它,其實解決的辦法是太簡單了,我不得不使用self而不是對像_這樣的NSMutableArray對象的獨立引用。換句話說,如果你這樣做,它將不起作用,因爲由RACObserve()建立的KVO與你傳入的對象相關(在本例中爲self),所以只有符合KVC標準的突變才能通過通過觀察對象將觸發觀察通知。