gpt4 book ai didi

ios - Core Data 和 UISearchBar 之间的问题

转载 作者:行者123 更新时间:2023-11-29 03:33:39 25 4
gpt4 key购买 nike

我在 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 与核心数据交互(以便我在网上检查)或者我应该做什么。提前致谢

最佳答案

让我们从调用 CoreData 开始,一旦它起作用,您就可以继续查询它并从搜索栏进行响应。

由于 UITableViewControllerDelegate 协议(protocol)方法期望非常快速的响应,因此标准做法是从数据库中获取所需的数据并将其存储在类变量中,然后让 tableview:cellForRowAtIndexPath: 方法从类变量中加载数据,如下所示需要。

当您更改数据时,您会更新类变量,并且可以在 tableView 上调用 reloadData: 让界面跟上( View 不是模型...)

首先配置正确的获取请求,并将响应加载到 NSMutableArray 类变量中。一个例子如下:

- (void)loadFiltersFromStore {
_enabledFilters = nil;
AppDelegate* delegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
NSManagedObjectContext* moc = [delegate managedObjectContext];
NSEntityDescription* description = [NSEntityDescription entityForName:@"Filter" inManagedObjectContext:moc];
NSSortDescriptor* descriptor = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];
NSFetchRequest* request = [[NSFetchRequest alloc] init];
[request setEntity:description];
[request setSortDescriptors:[NSArray arrayWithObject:descriptor]];
NSError *error;
_enabledFilters = [NSMutableArray arrayWithArray:[moc executeFetchRequest:request error:&error]];
if (error) {
NSLog(@"%@",error.localizedDescription);
}
}

现在您已经获取了一些数据并存在于类变量中(在本示例中,该变量是一个名为“enabledFilters”的 NSMutableArray,它包含一个名为“Filter”的 NSManagedObject 的多个实例)

现在您可以访问该数据以供 tableView 使用,如下所示:

FreeCell* cell = [cv dequeueReusableCellWithReuseIdentifier:@"oneCell" forIndexPath:indexPath];
Filter* thisFilter = (Filter*)[_enabledFilters objectAtIndex:indexPath.row];
cell.label.text = thisFilter.name;
cell.label.backgroundColor = [UIColor clearColor];
NSString*targetName = thisFilter.imageName;
UIImage *image = [UIImage imageNamed:targetName];
cell.image.image = image;
BOOL purchased = (BOOL)[[NSUserDefaults standardUserDefaults] valueForKey:k_upgradePurchased];
if ([thisFilter.paidOrFree isEqual: @"free"]) {
cell.lockImage.hidden = YES;
}
else if (purchased) {
cell.lockImage.hidden = YES;
}
else {
cell.lockImage.hidden = NO;
}
return cell;

我特意设置了这个 TableView ,以便该行始终对应于 _enabledFilters 中对象的索引。您不必这样做,但这是很常见的做法。

现在您可以使用简单的“点”访问器来访问 NSManagedObject 的每个实例的属性。在该示例中,我提取存储在三个不同属性(.name、.imageName 和 .paidOrFree)中的值,并使用它们来配置特定单元格。

首先让你的底层 CoreData 正常工作,然后 searchBar 问题将变得更容易解决。

关于ios - Core Data 和 UISearchBar 之间的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19458159/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com