RAC'属性待定

时间:2014-08-05 08:46:41

标签: reactive-cocoa

是否可以观察尚未设置的对象的属性?

我正在尝试实现MVVM模式,这是我到目前为止所拥有的:

在我的视图控制器中,我实例化视图模型和模型:

- (void)viewDidLoad
{
  [super viewDidLoad];
  Model * model = [Model initWithSomeData:[self dataFromSomewhere]];
  ViewModel * viewModel = [[ViewModel alloc] init];
  viewModel.model = model;

  RAC(self.propertyLabel, text) = [RACObserve(self.viewModel, someTransformedProperty];
}

现在在ViewModel类中,我在初始化程序中有以下代码

- (instancetype)init
{
  self = [super init];

  if (self) {
    RAC(self, someTransformedProperty = [RACObserve(self.model, plainProperty) map:id^(id value) {
      return [self transformProperty:value];
    }];
  }
}

现在的问题是属性标签没有设置。有没有办法解决?此外 - 如果plainProperty中的model为零,即使我将nilValue作为RAC宏的第3个参数提供,我也会遇到崩溃。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

呀!只需将RACObserve(self.model, plainProperty)转为RACObserve(self, model.plainProperty)

哦,但也是:

ViewModel * viewModel = [[ViewModel alloc] init];
viewModel.model = model;
self.viewModel = viewModel; // <--- don't forget that
RAC(self.propertyLabel, text) = RACObserve(self.viewModel, someTransformedProperty);

就崩溃而言,很难说没有更多信息会是什么。 transformProperty:上会nil崩溃吗?