【问题标题】:ReactiveCocoa binding "networkActivityIndicator" CrushesReactiveCocoa 绑定“networkActivityIndi​​cator”粉碎
【发布时间】:2014-08-04 17:57:46
【问题描述】:

我有这个代码:

 RAC(self.viewModel , password) = self.signupCell.passwordTextField.rac_textSignal;
    RAC(self.viewModel , userName) = self.signupCell.usernameTextField.rac_textSignal;
    RAC([UIApplication sharedApplication], networkActivityIndicatorVisible) = self.viewModel.executeRegister.executing;

在我的登录页面。 起初运行完美,但用户注销并再次进入注册页面,应用程序崩溃了:

 RAC([UIApplication sharedApplication], networkActivityIndicatorVisible) = self.viewModel.executeRegister.executing;

有错误:

'信号名称:已绑定到对象上的关键路径“networkActivityIndi​​catorVisible”,添加信号名称:未定义行为'

我猜这与订阅 UIApplication 事件有关。但我不确定除了发送订阅者之外我还能做什么:

 [subscriber sendCompleted]

有人遇到过同样的问题吗?

谢谢。

编辑

在@erikprice 和@powerj1984 的帮助下,我找到了解决方案:

RAC([UIApplication sharedApplication], networkActivityIndicatorVisible) = [self.viewModel.executeRegister.executing takeUntilBlock:^BOOL(id x) {
    return _viewShowing;
}];

“_viewShowing”真实值在 ViewWillAppear 上设置为 YES,在 ViewWillDisapear 上设置为 NO。 这不是最好的编码。所以如果有人有更好的选择,我很乐意使用它。 谢谢。

【问题讨论】:

  • 尝试添加一个 takeUntil,直到用户离开登录屏幕时发送@YES 信号?
  • 感谢您的回复,我似乎无法“doUntil”调用 dealloc 方法。

标签: objective-c reactive-cocoa


【解决方案1】:

该错误消息表示您尝试多次调用RAC(UIApplication.sharedApplication, networkActivityIndicatorVisible)。确保您只对该特定对象的特定属性进行一次调用。 (或者至少在您处理订阅之前,正如@powerj1984 所建议的那样。)

【讨论】:

  • 感谢您的回复,您能给我举个例子或参考一下吗?我正在尝试“doUntil”调用 dealloc 方法,但不知道该怎么做。谢谢。
  • 这是真正特定于您如何编写代码的内容。我的建议是您在调试器中启动您的应用程序,并在您调用RAC() 的行上放置一个断点。当它在同一个对象上被第二次调用时,查看调用堆栈以了解你是如何到达那个点的,然后在你的代码中进行任何必要的更改,以停止在同一个对象和属性组合上调用它两次。
猜你喜欢
  • 1970-01-01
  • 2015-02-09
  • 1970-01-01
  • 2011-07-20
  • 1970-01-01
  • 2017-10-28
  • 1970-01-01
  • 2011-11-18
  • 2016-12-11
相关资源
最近更新 更多