【问题标题】:ReactiveCocoa simple property binding with swiftReactiveCocoa 与 swift 的简单属性绑定
【发布时间】:2014-10-09 12:44:51
【问题描述】:

我正在尝试做一些简单的模型 - 使用 swift 与 ReactiveCocoa 进行视图模型绑定

工作流程:

我的模型会加载一些数据(在本例中为类别)并更新其 loadingCategories 状态。如果加载则为 true,否则为 false

然后在我的视图模型中,我希望它将自己的加载属性绑定到模型中的 loadingCategories 属性

这是代码。它不起作用。我能找到的唯一示例是使用 UIControls 的信号,我不知道如何将这些示例用于属性绑定(无控件)

let loading = self.categorySelector.rac_valuesAndChangesForKeyPath("loadingCategories", options: .New, observer: nil)
loading.subscribeNextAs { (l:Bool) -> () in
  self.loading = l;
}

运行时,我只收到“无法识别的选择器发送到实例”错误。

【问题讨论】:

  • 什么是无法识别的选择器,什么对象正在接收它?当抛出异常时,这应该在您的调试器中打印出来。

标签: swift reactive-cocoa


【解决方案1】:

你的观察者参数不能为nil,它应该是发送属性变化信号的对象(self.categorySelector)

let loading = self.categorySelector.rac_valuesForKeyPath("loadingCategories",  observer:self.categorySelector)
loading.subscribeNextAs { 
   [weak self] (l:Bool) -> () in
   if (self != nil){
       self!.loading = l;
   }
}

通过指定“unowned”确保不要在闭包中保留 self 的所有权,否则您将有一个导致内存泄漏的保留周期。

最后但并非最不重要的一点是确保您观察到的属性是动态注释的:

dynamic var loadingCategories:Bool!

【讨论】:

    猜你喜欢
    • 2011-07-23
    • 2015-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-09
    • 1970-01-01
    • 1970-01-01
    • 2017-08-08
    相关资源
    最近更新 更多