我開發有狗在以.json如何使用UITableview中的UISearchBar在本地JSON中獲取數據?
我能夠獲取在泰伯維所有數據的本地數據庫的應用程序和它完美的作品如下:
-(void)readDataFromFile
{
NSString * filePath =[[NSBundle mainBundle] pathForResource:@"Dogs" ofType:@"json"];
NSError * error;
NSString* fileContents =[NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:&error];
if(error)
{
NSLog(@"Error reading file: %@",error.localizedDescription);
}
rows = (NSArray *)[NSJSONSerialization
JSONObjectWithData:[fileContents dataUsingEncoding:NSUTF8StringEncoding]
options:0 error:NULL];
}
現在我的目標是通過一個搜索欄實現SEARCH系統,該搜索欄允許我直接在JSON文件中查找數組。這是JSON的配置:
[
{
"id": "6523",
"ident": "00A",
"type": "Pitbull",
"name": "Rocky",
},
{
"id": "6524",
"ident": "00AK",
"type": "Pitbull",
"name": "Sam",
},
}
我想,當在搜索欄寫洛基......它讓我看到陣列中的所有信息。
我說這種搜索方式:
#pragma Search Methods
- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope
{
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF beginswith[c] %@", searchText];
self.searchResults = [[self.array valueForKey:@"name"] filteredArrayUsingPredicate:predicate];
}
-(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString
{
[self filterContentForSearchText:searchString
scope:[[self.searchDisplayController.searchBar scopeButtonTitles]
objectAtIndex:[self.searchDisplayController.searchBar
selectedScopeButtonIndex]]];
return YES;
}
這是我的TableView方法
#pragma mark - Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
// Return the number of sections.
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if (tableView == self.searchDisplayController.searchResultsTableView) {
return [self.searchResults count];
} else {
return 150;
}
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
DogCell *cell = (DogCell *)[tableView dequeueReusableCellWithIdentifier:@"Cell"];
static NSString *CellIdentifier = @"cell";
if(cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle
reuseIdentifier:CellIdentifier];
}
if (tableView == self.searchDisplayController.searchResultsTableView) {
cell.textLabel.text = [self.searchResults objectAtIndex:indexPath.row];
//我想獲得也與狗 「標識」 的細節;
//cell.detailTextLabel.text = [self.searchResults objectAtIndex:indexPath.row];
} else {
cell.textLabel.text = [[self.array objectAtIndex:indexPath.row]valueForKey:@"name"];
cell.detailTextLabel.text = [[self.array objectAtIndex:indexPath.row]valueForKey:@"ident"];
}
return cell;
}
現在我能夠搜索感謝SearchBar,但我不能有兩個值的JSON數組。我的意思是:
1)當我在搜索欄搜索洛基我只得到含有細胞:
洛基但不是的ident
我的新目標
有一種方法在搜索後的單元格中同時獲得「ident &名稱」?
我剛試過!它不起作用:( – Kingofmit
你能告訴我你面臨什麼問題嗎? –
只需將代碼中的行替換爲 NSPredicate * predicate = [NSPredicate predicateWithFormat:@「name CONTAINS [cd] **%@ **」 [搜索欄文本]; –