为啥 iOS viewPager 与 UISearchController 崩溃?
Posted
技术标签:
【中文标题】为啥 iOS viewPager 与 UISearchController 崩溃?【英文标题】:Why does Ios viewPager crashed with UISearchController?为什么 iOS viewPager 与 UISearchController 崩溃? 【发布时间】:2016-08-09 05:40:40 【问题描述】:现在我在 ios 应用程序开发过程中遇到了一个问题。 我做了一个viewpagercontrollerview 包括几个viewcontroller。 每个 Viewcontroller 都包含 tableview。 我在这个 tableview 中使用了 UISearchController。 但是,每当我单击 searchcontroller 并滚动选项卡时,就会发生错误。
2016-08-08 22:07:11.211 ToolManager[3913:121312] *** Assertion failure in -[_UIQueuingScrollView _setWrappedViewAtIndex:withView:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3512.60.7/_UIQueuingScrollView.m:332
2016-08-08 22:07:11.222 ToolManager[3913:121312] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Unexpected subviews'
*** First throw call stack:
(
0 CoreFoundation 0x0000000104c3dd85 __exceptionPreprocess + 165
1 libobjc.A.dylib 0x00000001046b1deb objc_exception_throw + 48
2 CoreFoundation 0x0000000104c3dbea +[NSException raise:format:arguments:] + 106
3 Foundation 0x00000001042fbd5a -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 198
但是,没有点击搜索控件和滚动,那么工作做得很好。 我看到了几个分辨率... 一种方法是在 scool 选项卡之前关闭 searchcontroller。 但是我怎样才能捕获标签滚动! 现在我在每个视图控制器中添加 searchcontroll。
@interface CurrentToolListViewController : BaseViewController<UITableViewDelegate, UITableViewDataSource,
UISearchResultsUpdating, UISearchControllerDelegate>
@property (nonatomic, strong) UISearchController *searchController;
@property (nonatomic, copy) NSString *filterString;
@end
和.m文件
self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil];
self.searchController.searchResultsUpdater = self;
self.searchController.dimsBackgroundDuringPresentation = NO;
self.searchController.delegate = self;
[self.searchController.searchBar sizeToFit];
self.tblCurToolList.tableHeaderView = self.searchController.searchBar;
self.definesPresentationContext = YES;
请帮帮我。
【问题讨论】:
【参考方案1】:您必须在 viewWillDisappear(_:) 方法中使 searchController 处于非活动状态
-(void) viewWillDisappear:(BOOL)animated
[super viewWillDisappear:animated];
self.searchController.active = NO;
编辑
如果您滑动到下一个 ViewController,上面的代码应该可以修复您的应用程序崩溃,但是如果您使用 UIButton
调用 setViewController
,那么您必须检查 searchController在UIButton
的@IBAction
中处于活动状态(使用if 语句)。在 if 语句中,输入self.searchController.active = NO;
,然后输入return
。
这只是让 searchController 处于非活动状态,然后您必须再次按下按钮以使其调用适当的方法 (setViewController
)
【讨论】:
以上是关于为啥 iOS viewPager 与 UISearchController 崩溃?的主要内容,如果未能解决你的问题,请参考以下文章