RACObserve subscribeNext 在观察项的值发生变化时没有执行?
RACObserve subscribeNext didn't execute when value of the observed item changed?
大家好我有一个奇怪的问题,我把这段代码放在我的绑定方法中:
[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
找到了,其实解决方法太简单了,我不得不使用self
而不是像_
那样对NSMutableArray对象进行独立引用。换句话说,如果你这样做,它不会工作,因为 RACObserve() 建立的 KVO 是相对于你作为它的第一个参数传入的对象(在本例中为 self),所以只有符合 KVC 的突变通过通过被观察对象会触发观察通知
大家好我有一个奇怪的问题,我把这段代码放在我的绑定方法中:
[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
找到了,其实解决方法太简单了,我不得不使用self
而不是像_
那样对NSMutableArray对象进行独立引用。换句话说,如果你这样做,它不会工作,因为 RACObserve() 建立的 KVO 是相对于你作为它的第一个参数传入的对象(在本例中为 self),所以只有符合 KVC 的突变通过通过被观察对象会触发观察通知