車両の在庫番号のリストがあり、特定のものを検索する必要がある 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;
}
どんな助けでも大歓迎です!