Если вы используете ARC, убедитесь, что вы создали iVar для UISearchDisplayController в вашем заголовочном файле.
Если вы создаете UISearchDisplayController, используя:
UISearchDisplayController* searchDisplayController = [[UISearchDisplayController alloc] initWithSearchBar:searchField contentsController:self];
он будет выпущен ARC, он не будет вызывать какие-либо методы делегата, а когда вы вызовете self.searchDisplayController
(свойство UIViewController), он будет nil
.
Итак, исправление:
В вашем файле заголовка (.h):
@interface MenuViewController : UIViewController <UITableViewDataSource, UITableViewDelegate, UISearchBarDelegate, UISearchDisplayDelegate> {
UISearchDisplayController* searchDisplayController;
UISearchBar *searchField;
UITableView* tableView;
NSArray* searchResults;
}
и в файле реализации (.m):
searchField = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 49)];
searchField.delegate = self;
searchDisplayController = [[UISearchDisplayController alloc] initWithSearchBar:searchField contentsController:self];
searchDisplayController.delegate = self;
searchDisplayController.searchResultsDataSource = self;
searchDisplayController.searchResultsDelegate = self;
tableView.tableHeaderView = searchField;
tableView.contentOffset = CGPointMake(0, searchField.frame.size.height);
При такой реализации вы можете вызывать self.searchDisplayController
и searchDisplayController
в остальной части кода.