tutorial searchcontroller bar and objective-c xcode cocoa-touch uisearchbar ios7

objective-c - bar - uisearchcontroller



Nuevo UISearhBar en ios 7 (1)

Hola chicos.

Tengo algunos problemas con la nueva uisearchbar en iOS 7

en mi aplicación tengo una vista de tabla con la barra de búsqueda en tableHeaderView está hecha a mano (se agregó mediante programación) - tableviewcontroller en el guión gráfico, en el método viewDidLoad agrego searchDisplayController con mi barra de búsqueda personalizada heredada de UISearchBar.

todas las cosas van en el controlador de navegación.

en la lógica de mi aplicación, en algún momento lanzo este controlador de navegación enviando despedir ViewController

En ios 6 funciona perfecto.

pero en ios 7 me cuelgo al intentar liberar el controlador de navegación.

en log tengo líneas interesantes ...

al final de viewDidLoad agrego esto:

for (UIView *view in self.view.subviews) { NSLog(@"%@ %p", [view.class description], view); }

en ios 6 solo tengo esto

2013-09-19 12:40:40.553 myApp[4182:c07] KRSearchBar 0x988bdd0

en ios 7:

2013-09-19 13:08:47.808 myApp[4690:a0b] UIView 0xa265310 2013-09-19 13:08:47.809 myApp[4690:a0b] UITableViewWrapperView 0xa25b4d0 2013-09-19 13:08:47.810 myApp[4690:a0b] KRSearchBar 0xa2591b0

y después de liberar el controlador de navegación tengo

2013-09-19 13:09:32.419 myApp[4690:a0b] *** -[UIView release]: message sent to deallocated instance 0xa265310

entonces ... ¿quién sabe qué es UIView? ¿De dónde viene y cómo lidiar con eso?


iOS 7 sí modificó algunas reglas sobre tableviews y su delegado. Por supuesto, esto no se destaca en un lugar fácil de encontrar.

Pero, básicamente, en una versión anterior de iOS, podría eliminar eventualmente el delegado tableView y el origen de datos. No hacerlo no enviaba ningún mensaje de error.

Desde iOS 7, DEBE anularlos en su dealloc, de lo contrario, puede provocar este bloqueo.

- (void)dealloc { fetchedResultsController.delegate = nil; self.searchDisplayController.delegate = nil; self.searchDisplayController.searchResultsDelegate = nil; self.searchDisplayController.searchResultsDataSource = nil; self.tableView.delegate = nil; self.tableView.dataSource = nil; }

Avíseme si esto resolvió su problema.