当观察项目的值发生变化时,RACObserve subscribeNext没有执行?

时间:2017-05-25 16:37:22

标签: objective-c xcode reactive-cocoa

大家好我有一个奇怪的问题,我把这个代码放在我的绑定方法中:

[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

1 个答案:

答案 0 :(得分:0)

找到它,实际上解决方案太简单了,我不得不使用self而不是像_那样对NSMutableArray对象的独立引用。换句话说,如果你这样做,它就不会起作用,因为RACObserve()建立的KVO是相对于你传入的对象作为它的第一个参数(在本例中是self),所以只有KVC兼容的突变通过观察对象的那个将触发观察通知。