-[RxCocoa.RxTextViewDelegateProxy text]: unrecognized selector sent to instance 0x28132bdb0
make1a opened this issue · comments
makemake commented
Short description of the issue:
crash on -[RxCocoa.RxTextViewDelegateProxy text]: unrecognized selector sent to instance 0x28132bdb0
private let userInputSubject = PublishSubject<String>()
private let emoticonsRelay = BehaviorRelay<[Emoticon]>(value: [])
private var disposeBag = DisposeBag()
{
// 用户3秒没有操作输入框,没有滑动,就隐藏
userDidInteract()
textView?.rx.didChange
.subscribe(onNext: { [weak self] in
if let text = self?.textView?.text {
self?.userInputChanged(text: text)
}
})
.disposed(by: disposeBag)
// 1.长度超过15的文本不请求接口, 2.milliseconds(500)再请求接口
userInputSubject
.filter { [weak self] text in
guard let self = self else { return false }
return text.count <= self.maxCount
}
.debounce(.milliseconds(500), scheduler: MainScheduler.instance)
.flatMapLatest { [weak self] text -> Observable<[Emoticon]> in
guard let self = self else { return .empty() }
return self.requestEmoticons(text)
}
.bind(to: emoticonsRelay)
.disposed(by: disposeBag)
// rx
let dataSource = RxCollectionViewSectionedReloadDataSource<SectionModel<String, Emoticon>> { _, collectionView, indexPath, item in
guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: ChatRelatedEmoticonCell.identifier, for: indexPath) as? ChatRelatedEmoticonCell else {
return UICollectionViewCell()
}
cell.refresh(with: item)
return cell
}
// 监听单元格选择事件
collectionView.rx.modelSelected(Emoticon.self)
.subscribe(onNext: { [weak self] emoticon in
self?.itemSelected(emoticon: emoticon)
})
.disposed(by: disposeBag)
// 绑定数据
emoticonsRelay
.observe(on: MainScheduler.instance)
.map { [SectionModel(model: "", items: $0)] }
.bind(to: collectionView.rx.items(dataSource: dataSource))
.disposed(by: disposeBag)
// 根据数据源来决定是否隐藏 ChatRelatedEmoticonView
emoticonsRelay
.asDriver()
.drive(onNext: { [weak self] emoticons in
guard let `self` = self else { return }
let textEmpty = self.textView?.text.isEmpty ?? true
let dataEmpty = emoticons.isEmpty
let isVisible = !textEmpty && !dataEmpty
if isVisible {
self.isHidden = false
self.resetTimer()
} else {
self.isHidden = true
}
let jsonStr = self.jsonStr() ?? ""
self.delegate?.chatRelatedEmoticonViewDidUpdateVisibility(isVisible: isVisible, jsonStr: jsonStr)
})
.disposed(by: disposeBag)
}
RxSwift/RxCocoa/RxBlocking/RxTest version/commit
pod 'RxSwift', '6.6.0'
pod 'RxCocoa', '6.6.0'
pod 'RxRelay', '6.6.0'
Platform/Environment
- iOS
Xcode version:
14.2
Installation method:
- CocoaPods
crash log:
Fatal Exception: NSInvalidArgumentException
-[RxCocoa.RxTextViewDelegateProxy text]: unrecognized selector sent to instance 0x28132bdb0
Fatal Exception: NSInvalidArgumentException
0 CoreFoundation 0xec870 __exceptionPreprocess
1 libobjc.A.dylib 0x2bc00 objc_exception_throw
2 CoreFoundation 0x17d19c +[NSObject(NSObject) _copyDescription]
3 CoreFoundation 0x31ff8 ___forwarding___
4 CoreFoundation 0x172b10 _CF_forwarding_prep_0
5 ContextKitExtraction 0x907c +[CKContextContentProviderUIScene _bestVisibleStringForView:usingExecutor:]
6 ContextKitExtraction 0x8154 +[CKContextContentProviderUIScene _donateContentsOfWindow:usingExecutor:withOptions:]
7 ContextKitExtraction 0x7908 __78+[CKContextContentProviderUIScene extractFromScene:usingExecutor:withOptions:]_block_invoke
8 ContextKitExtraction 0x6688 __64-[CKContextExecutor addWorkItemToQueue:withWorkItem:andContext:]_block_invoke
9 libdispatch.dylib 0x26a8 _dispatch_call_block_and_release
10 libdispatch.dylib 0x4300 _dispatch_client_callout
11 libdispatch.dylib 0x129e0 _dispatch_main_queue_drain
12 libdispatch.dylib 0x125b0 _dispatch_main_queue_callback_4CF
13 CoreFoundation 0x3720c __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__
14 CoreFoundation 0x33f18 __CFRunLoopRun
15 CoreFoundation 0x33668 CFRunLoopRunSpecific
16 GraphicsServices 0x35ec GSEventRunModal
17 UIKitCore 0x22c2b4 -[UIApplication _run]
18 UIKitCore 0x22b8f0 UIApplicationMain
19 HelloTalk_Binary 0x54ff7f8 main + 25 (main.m:25)
20 ??? 0x1baf12dcc (缺少)
makemake commented
Can I fix it with the following code?
@objc
extension RxTextViewDelegateProxy {
var text: String {
return String()
}
}
Zero.D.Saber commented