tutorial searchcontroller bar ios crash tableview uisearchdisplaycontroller

ios - searchcontroller - Intentando configurar BackgroundView personalizado en una UITableView con searchDisplayController, lo que provoca que el mensaje se envíe a la instancia desasignada



uisearchcontroller swift 4 (1)

Tengo un UITableViewController respaldado por NSFetchedResultsController . Siempre que la tabla vista esté vacía, estoy tratando de configurar una vista de fondo personalizada cargada desde una NIB.

- (NSInteger) numberOfSectionsInTableView:(UITableView *)tableView { NSInteger numberOfSections = [super numberOfSectionsInTableView:tableView]; if (tableView != self.searchDisplayController.searchResultsTableView) { if (numberOfSections == 0 || (numberOfSections == 1 && [super tableView:tableView numberOfRowsInSection:0] == 0)) [tableView setBackgroundView:[self viewForEmptyTable]]; else [tableView setBackgroundView:nil]; } return numberOfSections; } - (TableViewEmptyBGView*) viewForEmptyTable { if (_viewForEmptyTable == nil) { NSArray* viewForEmptyTableNIB = [[NSBundle mainBundle] loadNibNamed:@"iPhone-ViewForEmptyTable" owner:nil options:nil]; _viewForEmptyTable = [viewForEmptyTableNIB firstObject]; [_viewForEmptyTable setHeader:self.listaVaziaHeaderText]; [_viewForEmptyTable setBody:self.listaVaziaBodyText]; } return _viewForEmptyTable; }

Capturas de pantalla: https://dl.dropboxusercontent.com/u/628444/Crash-Screenshots.png

He intentado encontrar inútilmente a alguien que tuvo un problema similar antes porque estoy atrapado en esto por días. Si la tabla vista se carga vacía, está bien (1), sin embargo, si fetchedresultcontroller (2) incluye una celda (3) y elimina eso después de (4) la aplicación falla (5) con: *** -[UIView isHidden]: message sent to deallocated instance 0xc6cf440

Parece ser algo relacionado con el UISearchDisplayController intenta enviar un mensaje a un objeto desasignado:

# Event Type ∆ RefCt RefCt Timestamp Responsible Library Responsible Caller Malloc/Retain/Release (8) 00:09.546.357 UIKit -[UITableView setTableHeaderBackgroundColor:] 0 Malloc +1 1 00:09.546.357 UIKit -[UITableView setTableHeaderBackgroundColor:] 1 Retain +1 2 00:09.546.385 UIKit -[UIView(Internal) _addSubview:positioned:relativeTo:] 2 Retain +1 3 00:09.546.409 UIKit -[UISearchDisplayController _configureSearchBarForTableView] 3 Retain +1 4 00:09.546.474 UIKit -[UIView(Hierarchy) subviews] 4 Release -1 3 00:09.552.790 UIKit -[UIView(Internal) _invalidateSubviewCache] 11 Release -1 2 01:22.884.181 UIKit -[UIView(Hierarchy) removeFromSuperview] 12 Release -1 1 01:22.884.182 UIKit -[UITableView setTableHeaderBackgroundColor:] 13 Release -1 0 01:22.884.182 UIKit -[UISearchDisplayController _updateTableHeaderBackgroundViewInTableView:amountScrolledUnder:] Retain/Release (6) 00:09.563.097 UIKit -[UIView(Hierarchy) subviews] 5 Retain +1 4 00:09.563.097 UIKit -[UIView(Hierarchy) subviews] 6 Retain +1 5 00:09.657.977 UIKit -[UIView(Hierarchy) subviews] 7 Retain +1 6 00:09.808.482 QuartzCore -[CALayer layoutSublayers] 8 Release -1 5 00:09.808.483 QuartzCore -[CALayer layoutSublayers] 9 Release -1 4 00:09.821.299 QuartzCore CA::Transaction::observer_callback(__CFRunLoopObserver*, unsigned long, void*) 10 Release -1 3 01:22.877.290 UIKit -[UIView(Internal) _invalidateSubviewCache] 14 Zombie -1 01:22.884.204 UIKit -[UISearchDisplayController _updateTableHeaderBackgroundViewInTableView:amountScrolledUnder:]


Resulta que la creación de una propiedad con una fuerte referencia a emptyView resolvió el problema del mensaje enviado a la instancia desasignada.

@interface ListObjectsCoreDataTVC() @property (nonatomic, strong) TableViewEmptyBGView* viewForEmptyTable; @end