Intentar cargar la vista de un controller de vista mientras está desasignando

Estoy aprendiendo a implementar TableView con la barra de búsqueda y el filtrado de datos. Entonces, tengo lo siguiente en mi storyboard :

introduzca la descripción de la imagen aquí

Mi UITableViewController está conectado a la siguiente class SearchTableViewController.swift como esta:

 import UIKit class SearchTableViewController: UITableViewController, UISearchResultsUpdating { // table view controller properties let appleProducts = ["Mac", "iPhone", "Apple Watch", "iMac", "iPad"] var filtenetworkingAppleProducts = [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.filtenetworkingAppleProducts.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.filtenetworkingAppleProducts[indexPath.row] } else { cell.textLabel?.text = self.appleProducts[indexPath.row] } return cell } func updateSearchResultsForSearchController(searchController: UISearchController) { self.filtenetworkingAppleProducts.removeAll(keepCapacity: false) let searchPnetworkingicate = NSPnetworkingicate(format: "SELF CONTAINS[c] %@", searchController.searchBar.text!) let resultArray = (self.appleProducts as NSArray).filtenetworkingArrayUsingPnetworkingicate(searchPnetworkingicate) self.filtenetworkingAppleProducts = resultArray as! [String] self.tableView.reloadData() } } 

Esto funciona bien y el filtrado funciona como se esperaba:

introduzca la descripción de la imagen aquí

Sin embargo, cuando la aplicación se ejecuta en el simulador, recibo la siguiente advertencia en la window de debugging:

2015-09-07 00: 02: 46.116 TableViewSearch [2415: 68217] Intentar cargar la vista de un controller de vista mientras está desasignando no está permitido y puede dar como resultado un comportamiento no definido ()

Alguna idea de cómo solucionar este problema?

Pasé todo el día para entender este problema también … Algunos dijeron que estaba relacionado con el problema del Controlador de Navegación y otros dijeron que era un problema técnico. Aunque esta puede no ser la respuesta correcta, espero poder dar algunas pistas. Si crees que no es un enfoque correcto, avísame. Gracias. Mi caso es el siguiente (en function de un layout diferente, creo).

 var resultSearchController: UISearchController!() 

Entonces, tuve que agregar a continuación.

 self.resultSearchController.loadViewIfNeeded() 

Simplemente cambia la siguiente línea

 var resultSearchController = UISearchController() 

a la siguiente línea

 var resultSearchController:UISearchController! 

Su rest del código está bien. Solo se requiere un cambio.

Si desea ver una explicación detallada, consulte mi tutorial sobre UISearchController