Reactivecocoa 无法识别新的实例更改

Reactivecocoa doesn't recognize new instance changes

假设我有一个绑定到他的 ViewModel 的视图,如下所示:

查看:

RAC(self.lbl, userName) = RACObserve(self.viewModel.user, userName);

这会很管用!但是当我加载一个新的用户实例并像这样设置它时会发生什么:

视图模型:

-(void) userUpdated: (User *) user {

self.user =  user;

}

在这种情况下,视图绑定仍将绑定到旧用户实例!除了用新用户设置旧用户的所有属性外,有没有人遇到过这个问题并找到更好的方法来解决这个问题...?

谢谢!!

RAC(self.lbl, userName) = RACObserve(self.viewModel, user.userName);

逗号表示 "static" 部分 (self.viewModel) 和动态变化部分 (user.userName) 之间的分隔符。

这是 RACObserve 的一个非常好的功能,但您 可以 自己实现它,修改 Leo 的答案,使其适用于不断变化的 userName: map 不是输入用户名,而是输入 signal 用户名,然后 "flatten" 用 switchToLatest:

RAC(self.lbl, userName) = [[RACObserve(self.viewModel, user) map:^(User *user) {
    return RACObserve(user, userName);
}] switchToLatest];

这个简单的例子不是很有用,因为 RACObserve 内置了这个,但是这个技术通常非常强大。你最终会想要映射到未观察到的事物的信号中,所以我鼓励你花时间去理解为什么这是有效的。