使用ReactiveCocoa观察Realm的属性对象,以及如何在对象失效时进行处理

时间:2016-07-20 09:59:33

标签: ios objective-c mvvm realm reactive-cocoa

我正在尝试实现ViewModel。

我想将ViewModel绑定到Model(RealmObject)。

我使用Reactive Cocoa(2.5)将ViewModel绑定到Model。

类似的东西:

RAC(self, name)        = RACObserve(self, boundedProfile.name);
RAC(self, pictureUrl)  = RACObserve(self, boundedProfile.pictureUrl);
RAC(self, birthday)    = RACObserve(self, boundedProfile.birthdate);

我的问题是,如果稍后我删除该配置文件并使其失效,会发生什么?我应该删除所有观察员吗?我可以用ReactiveCocoa吗?

我正在使用ReactiveCocoa和Realm的Objective-C版本。

1 个答案:

答案 0 :(得分:1)

我认为RLMObject.invalidated属性符合KVO。因此,如果您希望在配置文件失效后中断订阅,则可以执行以下操作:

RACSignal *invalidationSignal = [[RACObserve(self, boundedProfile.invalidated)
    filter:^BOOL(BOOL invalid) {
        return invalid == true; // We're only interested in the cases where it was invalidated.
    }]
    replayLast]; // For multicasting the same value for all subscribers.

RAC(self, name)        = [RACObserve(self, boundedProfile.name) 
    takeUntil:invalidationSignal]; // Once a value passes here, the subscription breaks.

RAC(self, pictureUrl)  = [RACObserve(self, boundedProfile.pictureUrl) 
    takeUntil:invalidationSignal];

RAC(self, birthday)    = [RACObserve(self, boundedProfile.birthdate) 
    takeUntil:invalidationSignal];

注意:

我建议不要直接在ViewModel中使用你的数据库模型,并将它们映射到其他模型只用于表示,这样就可以更容易地处理这种情况。