gpt4 book ai didi

IOS Searchbar 返回错误数据

转载 作者:行者123 更新时间:2023-11-29 12:37:09 26 4
gpt4 key购买 nike

我正在疯狂地尝试让我的 IOS 搜索栏在 Iphone 上工作。我从远程服务器访问数据并填充内容文件。然后我做了一个过滤器,它创建了一个过滤后的内容文件。然后我执行 [self.tableView reloadData()]。它第一次运行良好。然后我改变我的范围并从我的服务器中再次获取数据并过滤它并重新加载。但是,该表第二次显示前一次显示的前 9 个项目,而不是筛选文件中的新 9 个项目。我在控制台显示过滤文件中的文件计数,在本例中为 tableView numberOfRowsInSection 中的 9:我还显示通过 cellForRowAtIndexPath 的每个项目。在 cellForRowAtIndexPath 中,我显示了正确的 9 个未过滤的项目,但它们没有出现在表格上!该表改为显示旧显示中的前 9 项。

我的问题是,即使计数正确,表格上是否也显示新数据而不是旧数据?为什么我在控制台上显示了正确的项目,但显示屏却显示旧显示屏上的项目。我需要做什么才能使新数据出现?我知道这很难理解,但我在下面列出了我的一些代码,希望有人能给我一个线索,说明为什么表格 View 没有用最新数据更新。

     //  This is where I get data back from the server.

self.listContent = [[NSArray alloc] init];

if(_scopeIndex == 0)
self.listContent = [jsonObject objectForKey:@"burials"];
else
if(_scopeIndex == 1)
self.listContent = [jsonObject objectForKey:@"obits"];
else
self.listContent = [jsonObject objectForKey:@"photos"];

if(self.listContent > 0)
{
dispatch_async(dispatch_get_main_queue(), ^{

[self filterContentForSearchText:searchString scope:
[[self.searchDisplayController.searchBar scopeButtonTitles] objectAtIndex:[self.searchDisplayController.searchBar selectedScopeButtonIndex]]];
[self.tableView reloadData];
});
}

下面是过滤数据的地方。在这种情况下,未过滤和过滤后的文件是相同的。

        - (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope{
/*
Update the filtered array based on the search text and scope.
*/

[self.filteredListContent removeAllObjects];// First clear the filtered array.

/*
Search the listContent for names that match and add to the filtered array.
*/

for (int i = 0; i < [self.listContent count]; i++)
{

NSComparisonResult result = [self.listContent[i][@"LastName"] compare:searchText options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch) range:NSMakeRange(0, [searchText length])];
if (result == NSOrderedSame)
{
[self.filteredListContent addObject:self.listContent[i]];
}
// }
}

这是我获取过滤项目的表计数的地方。

       - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
if (tableView == self.searchDisplayController.searchResultsTableView)
{
NSLog(@"Filtered Name count = %i", [self.listContent count]);
return [self.filteredListContent count];
}
else
{
NSLog(@"Name count = %i", [self.listContent count]);
return [self.listContent count];
}

这是我更新表格中单元格的地方:

       - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *kCellID = @"cellID";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kCellID];
if (cell == nil)
{

cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:kCellID];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
}

if(indexPath.row > [self.filteredListContent count] - 1)
return cell;

NSDictionary *burial = [self.filteredListContent objectAtIndex:indexPath.row];
NSString *lastname = burial[@"LastName"];
NSString *firstname = burial[@"FirstName"];

NSString *burialname = [NSString stringWithFormat: @"%@, %@", lastname, firstname];
cell.textLabel.text = burialname;


NSLog(@"Cell name= %@ index path=%i", cell.textLabel.text, indexPath.row);
return cell;

最佳答案

我改变了我的逻辑,一次去服务器获取我的内容,这次在我的内容表中包含了范围指示符。这使我能够处理范围过滤器,而无需返回服务器获取特定范围的数据。这样做会导致在更改范围时显示正确的 View 表。我不建议在搜索范围发生变化时异步访问服务器,因为它确实会搞砸 View 表。

关于IOS Searchbar 返回错误数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26029443/

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