Man*_*son 12 core-data viewdidload swift uisearchcontroller
我试图设置searchBar为tableHeaderView内部viewDidLoad:
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()
}
Run Code Online (Sandbox Code Playgroud)
这是我的fetch()功能:
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 {}
}
Run Code Online (Sandbox Code Playgroud)
但我不明白他们是不行的.Xcode崩溃,实际上什么都没发生.然后我试图改变viewDidLoad方法内部的东西:
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
}
Run Code Online (Sandbox Code Playgroud)
成功!工作正常.我不明白有什么区别?
小智 1
这是因为您在 fetchedResultsController 初始化之前就设置了 searchResultsUpdater 和 searchBar 的委托。代码中的某些地方 searchResultsUpdater 或 searchBar 的委托方法正在访问您的 fetchedResultsController 并将其获取为零,因此应用程序崩溃。我的建议是避免崩溃,将 searchResultsController 设置为计算属性或惰性属性。
| 归档时间: |
|
| 查看次数: |
496 次 |
| 最近记录: |