2017-05-25 123 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标准的突变才能通过通过观察对象将触发观察通知。