【发布时间】:2018-06-23 14:47:03
【问题描述】:
我是 RxSwift 的新手,今天我遇到了一个我无法解决的问题。我想在UITextField中观察controlEvents。
代码:
textField.rx
.controlEvent([.editingDidEndOnExit, .editingDidEnd])
.subscribe(onNext: { [weak self] in
// do stuff
})
.disposed(by: disposeBag)
当textField 辞职成为第一响应者或用户点击return 按钮时,我想现在。当我执行一行代码时代码工作正常:textField.resignFirstResponder() 但是当我点击 return 按钮时,我收到一条警告消息:
⚠️ 检测到重入异常。 调试:要调试此问题,您可以在 /Users/laxmorek/Documents/projects/meetingapplication-ios/Pods/RxSwift/RxSwift/Rx.swift:97 中设置断点并观察调用堆栈。 问题:这种行为破坏了可观察序列语法。
next (error | completed)?这种行为破坏了语法,因为序列事件之间存在重叠。 可观察序列试图在前一个事件的发送完成之前发送一个事件。 解释:这可能意味着你的代码中存在某种意想不到的循环依赖, 或者系统未按预期方式运行。 补救措施:如果这是预期的行为,可以通过添加.observeOn(MainScheduler.asyncInstance)来抑制此消息 或以其他方式将序列事件加入队列。
我不明白这一点。
- 在
RxSwift中观察多个controlEvent的正确方法是什么? - 为什么我会收到此警告消息?我的观察设置有什么问题?
编辑
临时解决方法是我这样拆分我的代码:
textField.rx
.controlEvent(.editingDidEndOnExit)
.subscribe(onNext: { [weak self] in
self?.isSelected = false
})
.disposed(by: disposeBag)
textField.rx
.controlEvent(.editingDidEnd)
.subscribe(onNext: { [weak self] in
self?.isSelected = false
})
.disposed(by: disposeBag)
但是这个代码重复看起来不太好。 :/
【问题讨论】:
标签: ios swift rx-swift rx-cocoa