问题描述
我正在尝试建立类似Instagram探索页面的视图。确切地说,我想在导航栏中显示一个带有UISearchBar
的视图,并且如果选择/点击了搜索栏,我想过渡到一个新视图。
我正在使用SwiftUI,并且已经实现了这样的搜索栏:
class SearchBar: NSObject,ObservableObject {
@Published var text: String = ""
let searchController: UISearchController = UISearchController(searchResultsController: nil)
var onChange: () -> Void = {}
override init() {
super.init()
self.searchController.obscuresBackgroundDuringPresentation = false
self.searchController.searchResultsUpdater = self
}
convenience init(onChange: @escaping() -> Void) {
self.init()
self.onChange = onChange
}
}
extension SearchBar: UISearchResultsUpdating {
func updateSearchResults(for searchController: UISearchController) {
// Publish search bar text changes.
if let searchBarText = searchController.searchBar.text {
self.text = searchBarText
self.onChange()
}
}
}
struct SearchBarModifier: ViewModifier {
let searchBar: SearchBar
func body(content: Content) -> some View {
content
.overlay(
ViewControllerResolver { viewController in
viewController.navigationItem.titleView = self.searchBar.searchController.searchBar
self.searchBar.searchController.hidesNavigationBarDuringPresentation = false
self.searchBar.searchController.searchBar.searchTextField.backgroundColor = .white
}
.frame(width: 0,height: 0)
)
}
}
extension View {
func add(_ searchBar: SearchBar) -> some View {
return self.modifier(SearchBarModifier(searchBar: searchBar))
}
}
现在,我试图像这样向搜索栏中添加UITapGestureRecognizer
:
viewController.navigationItem.titleView?.addGestureRecognizer(UITapGestureRecognizer(target: someClass,action: #selector(someClass.someFunction)))
但是在打开主视图时它总是崩溃。
那是错误消息:
2020-08-23 20:27:25.042221+0200 Envim[31277:771485] *** Terminating app due to uncaught exception 'NSinvalidargumentexception',reason: 'Invalid number value (NaN) in JSON write'
*** First throw call stack:
(
0 CoreFoundation 0x00007fff23e3cf0e __exceptionPreprocess + 350
1 libobjc.A.dylib 0x00007fff50ba89b2 objc_exception_throw + 48
2 Foundation 0x00007fff259fcde2 _writeJSONNumber + 1129
3 Foundation 0x00007fff259fda33 ___writeJSONObject_block_invoke + 371
4 libswiftCore.dylib 0x00007fff512f7c4d $ss26_SwiftDeferrednSDictionaryC23enumerateKeysAndobjects7options5usingySi_ys9UnmanagedVyyXlG_AHSpys5UInt8VGtXBtFTf4dnn_n + 397
5 libswiftCore.dylib 0x00007fff510d4155 $ss26_SwiftDeferrednSDictionaryC23enumerateKeysAndobjects7options5usingySi_ys9UnmanagedVyyXlG_AHSpys5UInt8VGtXBtFTo + 37
6 Foundation 0x00007fff259fd003 _writeJSONObject + 475
7 Foundation 0x00007fff259fa320 -[_NSJSONWriter dataWithRootObject:options:error:] + 86
8 Foundation 0x00007fff259fc3fa +[NSJSONSerialization dataWithJSONObject:options:error:] + 145
9 Envim 0x000000010d2d51c6 $sSe5EnvimE14fromDictionaryxyp_tkcfC + 406
10 Envim 0x000000010d2fc12d $s5Envim7BlogAPIC16loadPopularBlogs9onSuccessyySayAA0B0VGc_tFySo16FIRQuerySnapshotCSg_s5Error_pSgtcfU_ + 1549
11 Envim 0x000000010d2ea98b $sSo16FIRQuerySnapshotCSgs5Error_psgieggg_ACSo7NSErrorCsgieyByy_TR + 139
12 Envim 0x000000010d74ac88 _ZZ35-[FIRQuery wrapQuerySnapshotBlock:]EN9Converter7OnEventEN8firebase9firestore4util8StatusOrINS1_3api13QuerySnapshotEEE + 152
13 Envim 0x000000010d8eb597 _ZZN8firebase9firestore3api5Query12GetDocumentsENS1_6SourceEONSt3__110unique_ptrINS0_4core13EventListenerINS1_13QuerySnapshotEEENS4_14default_deleteIS9_EEEEEN10ListenOnce7OnEventENS0_4util8StatusOrIS8_EE + 839
14 Envim 0x000000010d8ed294 _ZZN8firebase9firestore3api5Query19AddSnapshotListenerENS0_4core13ListenoptionSEONSt3__110unique_ptrINS3_13EventListenerINS1_13QuerySnapshotEEENS5_14default_deleteIS9_EEEEEN9Converter7OnEventENS0_4util8StatusOrINS3_12ViewSnapshotEEE + 612
15 Envim 0x000000010d749551 _ZZN8firebase9firestore4core18AsyncEventListenerINS1_12ViewSnapshotEE7OnEventENS0_4util8StatusOrIS3_EEENKUlvE_clEv + 177
16 Envim 0x000000010d74947d _ZNSt3__1L8__invokeIRZN8firebase9firestore4core18AsyncEventListenerINS3_12ViewSnapshotEE7OnEventENS2_4util8StatusOrIS5_EEEUlvE_JEEEDTclclsr3std3__1E7forwardIT_Efp_Espclsr3std3__1E7forwardIT0_Efp0_EEEOSC_DpOSD_ + 29
17 Envim 0x000000010d74942d _ZNSt3__128__invoke_void_return_wrapperIvE6__callIJRZN8firebase9firestore4core18AsyncEventListenerINS5_12ViewSnapshotEE7OnEventENS4_4util8StatusOrIS7_EEEUlvE_EEEvDpOT_ + 29
18 Envim 0x000000010d7493fd _ZNSt3__110__function12__alloc_funcIZN8firebase9firestore4core18AsyncEventListenerINS4_12ViewSnapshotEE7OnEventENS3_4util8StatusOrIS6_EEEUlvE_NS_9allocatorISB_EEFvvEEclEv + 29
19 Envim 0x000000010d74809e _ZNSt3__110__function6__funcIZN8firebase9firestore4core18AsyncEventListenerINS4_12ViewSnapshotEE7OnEventENS3_4util8StatusOrIS6_EEEUlvE_NS_9allocatorISB_EEFvvEEclEv + 30
20 Envim 0x000000010d5e47e5 _ZNKSt3__110__function12__value_funcIFvvEEclEv + 53
21 Envim 0x000000010d5e1fb5 _ZNKSt3__18functionIFvvEEclEv + 21
22 Envim 0x000000010d9d58d5 _ZN8firebase9firestore4util4Task17ExecuteAndReleaseEv + 229
23 Envim 0x000000010d65e5ed _ZN8firebase9firestore4util19ExecutorLibdispatch11InvokeAsyncEPv + 29
24 libdispatch.dylib 0x0000000111e58e8e _dispatch_client_callout + 8
25 libdispatch.dylib 0x0000000111e66d97 _dispatch_main_queue_callback_4CF + 1149
26 CoreFoundation 0x00007fff23da0909 __CFRUNLOOP_IS_SERVICING_THE_MAIN_disPATCH_QUEUE__ + 9
27 CoreFoundation 0x00007fff23d9b459 __CFRunLoopRun + 2041
28 CoreFoundation 0x00007fff23d9a944 CFRunLoopRunSpecific + 404
29 GraphicsServices 0x00007fff38ba6c1a GSEventRunModal + 139
30 UIKitCore 0x00007fff48c8b9ec UIApplicationMain + 1605
31 Envim 0x000000010d39d631 $s5Envim0A10AppWrapperV4mainyyFZ + 305
32 Envim 0x000000010d39d6a9 $s5Envim0A10AppWrapperV5$mainyyFZ + 9
33 Envim 0x000000010d39d6c4 main + 20
34 libdyld.dylib 0x00007fff51a231fd start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)