ios - UISearchDisplayDelegate 메서드가 호출되지 않았습니다.

기사 출처 ios uitableview uisearchbar

프로그래밍 방식으로 UISearchBar 및 UISearchDisplayController를 만듭니다. 뷰 컨트롤러는 UITableViewController입니다. @interface StockTableViewController () <UISearchDisplayDelegate, UISearchBarDelegate> 아래 코드를 볼 수 있습니다. 그러나 검색 창에 입력하면 shouldReloadTableForSearchString이 다른 UISearchDisplayDelegate 메서드를 포함하여 호출되지 않습니다.

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.searchResults = [NSArray array];

    UISearchBar *searchBar = [[UISearchBar alloc] init];
    searchBar.barStyle = UISearchBarStyleDefault;
    searchBar.searchBarStyle = UISearchBarStyleDefault;
    searchBar.showsCancelButton = YES;
    searchBar.showsScopeBar = NO;
    searchBar.delegate = self;

    UISearchDisplayController *searchDisplayController = [[UISearchDisplayController alloc] initWithSearchBar:searchBar contentsController:self];
    searchDisplayController.delegate = self;
    searchDisplayController.searchResultsDataSource = self;
    searchDisplayController.searchResultsDelegate = self;

    self.tableView.tableHeaderView = searchBar;
}

- (void)searchDisplayControllerWillBeginSearch:(UISearchDisplayController *)controller
{
    NSLog(@"searching"); //not showed up in the console
}

- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString
{
    NSLog(@"%@", searchString); //not showed up in the console
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name LIKE %@", searchString];
    NSArray *results = [Stock MR_findAllSortedBy:@"createdDate" ascending:NO withPredicate:predicate];
    if ([results count] > 0) {

        self.searchResults = results;
        [self.searchDisplayController.searchResultsTableView reloadData];
    }
    return YES;
}
UISearchDisplayController를 지역 변수로 만들고 있기 때문에 작동하지 않습니다. 이로 인해 viewDidLoad가 범위를 벗어날 때 할당이 취소됩니다. 따라서 검색 디스플레이 컨트롤러에 대한 강력한 속성을 생성하면 제대로 작동해야합니다 (속성 이름을 searchDisplayController로 지정하면 이름 충돌이 발생하므로 다른 이름으로 호출).

이 질문에 대해 Stack Overflow에서 비슷한 토론을 찾았습니다: https://stackoverflow.com/questions/23026393/

관련 기사
ios - Parse.com 저장 이미지 IOS
ios - NSException 유형의 포착되지 않은 예외로 인해로드 종료시 앱 충돌
ios - iOS에서 페어링 된 Bluetooth 장치를 제거하려면 어떻게합니까?
ios - Windows 8에 Xcode를 설치하는 방법은 무엇입니까? [복제]
ios - iOS7 : 백그라운드 작업 ( "myapp"에 허용 된 시간을 초과하는 활성 어설 션이 있음)
ios - 'NSInvalidArgumentException', 이유 : '***-[NSURL initFileURLWithPath :] : nil string parameter'
ios - 핵심 데이터 / SQLite 데이터베이스를 앱에 다운로드 하시겠습니까?
ios - UITextView contentOffset이 iOS7에서 CGPointZero로 초기화되지 않았습니다.
ios - google-cast 샘플 ios / application에서이 오류 7은 무엇입니까?
ios - UIKit 다이내믹스가있는 고무처럼 탄력있는 버튼