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
内置了这个,但是这个技术通常非常强大。你最终会想要映射到未观察到的事物的信号中,所以我鼓励你花时间去理解为什么这是有效的。
假设我有一个绑定到他的 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
内置了这个,但是这个技术通常非常强大。你最终会想要映射到未观察到的事物的信号中,所以我鼓励你花时间去理解为什么这是有效的。