swift – viewDidLoad中之前和之后的区别

我试图将searchBar设置为viewDidLoad中的tableHeaderView: @H_404_1@override func viewDidLoad() { super.viewDidLoad() // SearchController initializiation self.searchController = UISearchController.init(searchResultsController: nil) self.searchController.delegate = self self.searchController.searchBar.delegate = self self.searchController.searchBar.sizetoFit() self.searchController.searchResultsUpdater = self self.searchController.searchBar.barTintColor = UIColor.white self.searchController.searchBar.keyboardAppearance = .default self.searchController.searchBar.backgroundColor = UIColor.white self.searchController.hidesNavigationBarDuringPresentation = true self.searchController.obscuresBackgroundDuringPresentation = false self.tableView.tableHeaderView = self.searchController.searchBar self.definesPresentationContext = true self.fetch() self.tableView.reloadData() }

这个我的fetch()函数

@H_404_1@func fetch() { let fetchRequest:NSFetchRequest<Phone> = Phone.fetchRequest() fetchRequest.sortDescriptors = [NSSortDescriptor.init(key: "header",ascending: true),NSSortDescriptor.init(key: "date",ascending: true)] self.fetchedResultsController = NSFetchedResultsController.init(fetchRequest: fetchRequest,managedobjectContext: self.managedobjectContext,sectionNameKeyPath: "header",cacheName: nil) self.fetchedResultsController.delegate = self do { try self.fetchedResultsController.performFetch() self.tableView.reloadData() } catch {} }

但我不明白他们是不会工作的. Xcode崩溃,实际上没有发生.然后我尝试改变viewDidLoad里面的内容

@H_404_1@override func viewDidLoad() { super.viewDidLoad() self.fetch() self.tableView.reloadData() // SearchController initializiation self.searchController = UISearchController.init(searchResultsController: nil) self.searchController.delegate = self self.searchController.searchBar.delegate = self self.searchController.searchBar.sizetoFit() self.searchController.searchResultsUpdater = self self.searchController.searchBar.barTintColor = UIColor.white self.searchController.searchBar.keyboardAppearance = .default self.searchController.searchBar.backgroundColor = UIColor.white self.searchController.hidesNavigationBarDuringPresentation = true self.searchController.obscuresBackgroundDuringPresentation = false self.tableView.tableHeaderView = self.searchController.searchBar self.definesPresentationContext = true }

成功!工作正常我不明白有什么区别?

这是因为您设置了searchResultsUpdater和searchBar的代理,甚至在您的fetchedResultsController被初始化之前.你的代码searchResultsUpdater或searchBar的代理方法中的某些地方访问你的fetchedResultsController并且得到它,所以你的应用程序崩溃.我的建议是避免崩溃是使searchResultsController作为计算或惰性属性.

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...