我在 StackOverflow 上看到了很多问题,但其中大多数都没有得到解答。我创建了一个使用 CoreData 的应用程序。要访问数据,您必须单击正确的 UITableView 单元格,其中单元格名称(textLabel)来自 Core Data 属性,例如
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
// Configure the cell...
NSManagedObject *data = [self.datas objectAtIndex:indexPath.row];
[cell.textLabel setText:[NSString stringWithFormat:@"%@", [data valueForKey:@"name"]]];
[cell.detailTextLabel setText:nil];
}
之后,我遵循了许多关于如何添加 UISearchBar 的教程,但应用程序总是崩溃,因为他无法将 UISearchBar 文本与存储在用于单元格的 textLabel 的核心数据中的信息匹配(应该被过滤)
对于过滤,我使用了在网上找到的这种方法:
- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope
{ // searchDati = array where i'm supposed to store the filtered rows
/* datas was created like this:
NSManagedObjectContext *managedObjectContext = [self managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Data"];
self.datas = [[managedObjectContext executeFetchRequest:fetchRequest error:nil] mutableCopy]; to manage the Core Data i suppose.*/
[_searchDati removeAllObjects];
NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"SELF contains[cd] %@", searchText];
_searchDati = [NSMutableArray arrayWithArray:[_datas filteredArrayUsingPredicate:resultPredicate]];
}
-(BOOL)searchDisplayController:(UISearchDisplayController *)controller
shouldReloadTableForSearchString:(NSString *)searchString
{
[self filterContentForSearchText:searchString
scope:[[self.searchDisplayController.searchBar scopeButtonTitles]
objectAtIndex:[self.searchDisplayController.searchBar
selectedScopeButtonIndex]]];
return YES;
}
你能告诉我应该如何进行吗?如果很难提供代码,您至少可以告诉我是否有一种简单的方法可以让 UISearchBar 与核心数据交互(以便我在网上查看)或者我应该做什么。提前致谢