Reactivecocoa不会识别新的实例更改

时间:2015-01-23 10:39:36

标签: objective-c reactive-cocoa

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

查看:

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

这会很棒!但是当我加载一个新的User实例并将其设置为这样的情况时会发生什么:

视图模型:

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

self.user =  user;

}

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

谢谢!

1 个答案:

答案 0 :(得分:1)

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

逗号表示“静态”部分(self.viewModel)与动态变化部分(user.userName)之间的中断。

这是RACObserve的一个非常好的功能,但你可以自己实现这个功能,修改Leo的答案,以便它适用于不断变化的userName:{{1不是用户名,而是用户名的信号,然后用map“展平”:

switchToLatest

这个简单的例子不是很有用,因为RAC(self.lbl, userName) = [[RACObserve(self.viewModel, user) map:^(User *user) { return RACObserve(user, userName); }] switchToLatest]; 内置了这个,但这种技术通常非常强大。你最终想要映射到未被观察到的东西的信号,所以我鼓励你花点时间来理解为什么会这样。