![](/img/trans.png)
[英]Attempting to load the view of a view controller while it is deallocating… (<UIAlertController:>)
[英]Attempting to load the view of a view controller while it is deallocating
我正在學習使用Search Bar和數據過濾實現TableView。 所以,我的storyboard
有以下內容:
我的UITableViewController
連接到以下SearchTableViewController.swift
類,如下所示:
import UIKit
class SearchTableViewController: UITableViewController, UISearchResultsUpdating {
// table view controller properties
let appleProducts = ["Mac", "iPhone", "Apple Watch", "iMac", "iPad"]
var filteredAppleProducts = [String]()
var resultSearchController = UISearchController()
override func viewDidLoad() {
super.viewDidLoad()
// Configure result search controller
self.resultSearchController = UISearchController(searchResultsController: nil)
self.resultSearchController.searchResultsUpdater = self
self.resultSearchController.dimsBackgroundDuringPresentation = false
self.resultSearchController.searchBar.sizeToFit()
self.resultSearchController.searchBar.placeholder = "Search Products"
self.tableView.tableHeaderView = self.resultSearchController.searchBar
self.tableView.reloadData()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
// MARK: - Table view data source
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if (self.resultSearchController.active) {
return self.filteredAppleProducts.count
} else {
return self.appleProducts.count
}
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as UITableViewCell
if (self.resultSearchController.active) {
cell.textLabel?.text = self.filteredAppleProducts[indexPath.row]
} else {
cell.textLabel?.text = self.appleProducts[indexPath.row]
}
return cell
}
func updateSearchResultsForSearchController(searchController: UISearchController) {
self.filteredAppleProducts.removeAll(keepCapacity: false)
let searchPredicate = NSPredicate(format: "SELF CONTAINS[c] %@", searchController.searchBar.text!)
let resultArray = (self.appleProducts as NSArray).filteredArrayUsingPredicate(searchPredicate)
self.filteredAppleProducts = resultArray as! [String]
self.tableView.reloadData()
}
}
運行正常,過濾按預期工作:
但是,當應用程序在模擬器中運行時,我在調試窗口中收到以下警告:
2015-09-07 00:02:46.116 TableViewSearch [2415:68217]不允許在取消分配時嘗試加載視圖控制器的視圖,並可能導致未定義的行為()
任何想法如何解決這一問題?
我花了一整天時間來理解這個問題......有人說它與導航控制器問題有關,而其他人說這是一個小問題。 雖然這可能不是正確答案,但希望我能給出一些暗示。 如果您認為這不是一個正確的方法,請告訴我。 謝謝。 我的情況如下(因為不同的設計,我認為。)
var resultSearchController: UISearchController!()
然后,我必須在下面添加。
self.resultSearchController.loadViewIfNeeded()
只需更改以下行
var resultSearchController = UISearchController()
跟隨線
var resultSearchController:UISearchController!
你剩下的代碼都可以。 只需要進行一次更改。
如果您想查看詳細說明,請查看我在UISearchController上的教程
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.