当我慢慢尝试围绕 ReactiveCocoa 进行思考时,我编写了这段代码,并且我相当确定有更好的方法来解决我的问题。我很感激有关如何改善/重新设计我的情况的意见。
@weakify(self);
[RACObserve(self, project) subscribeNext:^(MyProject *project) {
@strongify(self);
self.tasks = nil;
[[[project tasks] takeUntilBlock:^BOOL(NSArray *tasks) {
if ([tasks count] > 0) {
MyTask *task = (MyTask *)tasks[0];
BOOL valid = ![task.projectID isEqualToString:self.project.objectID];
return valid;
}
return NO;
}] subscribeNext:^(NSArray *tasks) {
self.tasks = tasks;
}];
}];
这是做什么的:
我有一个视图控制器,它有一个名为project
typeMyProject
的属性和一个tasks
type的属性NSArray
。一个项目有一个tasks
返回 s 数组的信号MyTask
。可以随时从外部更改项目。我希望我的视图控制器在发生上述情况时做出响应并自行刷新。
我试图解决的问题:
我曾经[[project tasks] subscribeNext:...]
在第一个块中,直到我意识到如果 webrequest 花费的时间太长并且我同时切换了项目,我会在新的上下文中从旧项目接收并分配数据!(此后不久,新数据集到达,一切恢复正常)。
尽管如此,这就是我遇到的问题,我通过使用该takeUntilBlock:
方法解决了它。我的问题是:我怎样才能简化/重新设计这个?