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.