0

車両の在庫番号のリストがあり、特定のものを検索する必要がある iOS アプリケーションを構築しています。

UITableView に必要なメソッドを実装し、デリゲートとソースなどを設定しました。テーブルビューが表示され、完全に機能します。

奇妙な点は、上部の検索ボックス (「検索バーと検索表示コントローラー」の事前作成済みオブジェクトによって提供される) に何かを入力すると、アプリケーションがクラッシュすることです。

*キャッチされていない例外 'NSInvalidArgumentException' が原因でアプリを終了しています。

tableView:numerOfRowsInSection: を実装したので、これは奇妙です。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    // Return the number of rows in the section.
    NSLog(@"Defining rows for table view: %i", allVehicles.count);
    return allVehicles.count;
}

そして、これは単独でテーブル ビューに対して完全に機能します。

検索方法も設定しています。

-(void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope {
    [self.filteredVehicles removeAllObjects];
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF.name contains[c] %@", searchText];
    filteredVehicles = [NSMutableArray arrayWithArray:[allVehicles filteredArrayUsingPredicate:predicate]];
}

-(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString {
    [self filterContentForSearchText:searchString
                               scope:[[self.searchDisplayController.searchBar scopeButtonTitles] objectAtIndex:[self.searchDisplayController.searchBar selectedScopeButtonIndex]]];
    return YES;
}

-(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchScope:(NSInteger)searchOption {
    // Tells the table data source to reload when scope bar selection changes
    [self filterContentForSearchText:self.searchDisplayController.searchBar.text scope:
     [[self.searchDisplayController.searchBar scopeButtonTitles] objectAtIndex:searchOption]];
    // Return YES to cause the search result table view to be reloaded.
    return YES;
}

どんな助けでも大歓迎です!

4

2 に答える 2