Я учусь реализовать 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()
}
}
Это прекрасно работает и фильтрация работает, как ожидался:
Однако w курица приложение работает в тренажере, я получаю следующее предупреждение в окне отладки:
2015-09-07 00: 02: 46,116 TableViewSearch [2415: 68217] Попытка загрузить мнение в целях контроллер, пока он deallocating не допускается и может привести к непредсказуемому поведению()
Любые идеи, как это исправить?
Что такое 'TableViewSearch'? –
@ILikeTau это название проекта/приложения в XCode. – Latheesan
Вы представляете новый контроллер? Я предполагаю, что он пытается снова представить этот контроллер или что-то подобное ... Можете ли вы добавить еще код? –