2

UINavigationBar の titleView として埋め込まれた UISearchBar を編集しているときにナビゲーション コントローラーの [戻る] ボタンをクリックすると、アプリがクラッシュするというバグが発生しています。メイン VC は、ビュー スタックにプッシュされる UITableViewController です。[parentView.navigationController pushViewController:myTableView animated:YES];

これは、viewDidLoad で UISearchBar を作成するために使用するコードです。

UISearchBar *customSearch = [[UISearchBar alloc] initWithFrame:
                                CGRectMake(0,0, 320, 44)];
customSearch.delegate = self;
customSearch.placeholder = @"Some placeholder text";
self.navigationItem.titleView = customSearch;

これらは、UISearchBar デリゲートのデリゲート実装です。ハンドル検索は、tableView をサポートする配列を更新し、[self.tableview reloadData] を呼び出すだけです。

- (void) searchBarTextDidBeginEditing:(UISearchBar *)searchBar {
    searchBar.showsCancelButton = YES;
}
- (void) searchBarTextDidEndEditing:(UISearchBar *)searchBar {
    searchBar.showsCancelButton = NO;
}
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar {
    [self handleSearch:searchBar];
    [searchBar resignFirstResponder];
}
- (void) searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText {
    [self handleSearch:searchBar];
}

- (void)handleSearch:(UISearchBar *)searchBar {
    [self updateFilteredData:searchBar.text];
}

- (void)searchBarCancelButtonClicked:(UISearchBar *) searchBar {
    searchBar.text = @"";
    [self handleSearch:searchBar];
    [searchBar resignFirstResponder];
}

クラッシュからは何の情報も得られません - ただのシグキルです。UISearchBar を編集していなければ問題なく動作します。ファーストレスポンダを辞任しようとしましたが、それでもクラッシュします。

更新 - フィルタリングされたデータの追加

- (void) updateFilteredData: (NSString *) nameFilter {
    if (nameFilter.length) {
      NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(first_name CONTAINS[cd] %@) OR (last_name CONTAINS[cd] %@)", nameFilter, nameFilter];
      self.filteredData = [self.data filteredArrayUsingPredicate:predicate];
    } else {
        self.filteredData = self.data;
    }
    [self.tableView reloadData];
}

私は次のすべてを試しました+それらすべてをviewWillDisappearで一緒に試しました。それらはすべて正常に実行され、searchBar 参照は有効な UISearchBar へのものです。

-(void)viewWillDisappear:(BOOL)animated {
    UISearchBar *mySearchBar = (UISearchBar *)self.navigationItem.titleView;
    [mySearchBar resignFirstResponder];
    mySearchBar.delegate = nil;
    self.navigationItem.titleView = nil;
    for (UIView *view in [mySearchBar subviews] ) {
        [view removeFromSuperview];
    }
    [mySearchBar removeFromSuperview];
    [super viewWillDisappear:animated];
}

それは検索バーの問題ではないかもしれません。検索バーを編集しているときに一貫してクラッシュが見られるだけです - ビューがキーボードを隠し、下のセルを再描画しようとしていると同時に、TableView が分解されている可能性があります。 .

4

0 に答える 0