大家好我有一个奇怪的问题,我把这个代码放在我的绑定方法中:
[RACObserve(self.viewModel,contacts) subscribeNext:^(id x) {
[self.contactsTableView reloadData];
}];
但是当我的viewModel中的联系人发生变化时,subscribeNext并没有执行!! ,我检查是否通过调试更改了值,它正常更改!!
这是在我的视图模型(简化)中更改值的位置:
我在这里启动了它:
- (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 :(得分:0)
找到它,实际上解决方案太简单了,我不得不使用self
而不是像_
那样对NSMutableArray对象的独立引用。换句话说,如果你这样做,它就不会起作用,因为RACObserve()建立的KVO是相对于你传入的对象作为它的第一个参数(在本例中是self),所以只有KVC兼容的突变通过观察对象的那个将触发观察通知。