gpt4 book ai didi

ios - UITableview 搜索解析 - 无结果

转载 作者:行者123 更新时间:2023-11-28 22:01:19 25 4
gpt4 key购买 nike

我正在尝试使用 UISearch 栏来查找特定人员的所有对象。我设置了它,以便每个 PFUser 或用户在 points 的主要对象中都有一个名称对象。当我试图找到用户时,对象什么也没有出现,但在 NSLogs 中我得到了所有信息。我认为我的问题出在 cellForRowAtIndexPath 中,但我不知道为什么!

首先我查询:

- (PFQuery *)queryForTable {
PFQuery *query = [PFQuery queryWithClassName:@"points"];


// The key of the PFObject to display in the label of the default cell style
//self.textKey = @"opponent";

// Uncomment the following line to specify the key of a PFFile on the PFObject to display in the imageView of the default cell style
// self.imageKey = @"image";

// Whether the built-in pull-to-refresh is enabled
self.pullToRefreshEnabled = YES;

// Whether the built-in pagination is enabled
self.paginationEnabled = NO;

// The number of objects to show per page
self.objectsPerPage = 50;
//where you set the username to the specific user to get only this user's post.
// If no objects are loaded in memory, we look to the cache first to fill the table
// and then subsequently do a query against the network.

if (self.objects.count == 0) {
query.cachePolicy = kPFCachePolicyCacheThenNetwork;
}

[query orderByDescending:@"createdAt"];

return query;
}

我把我的酒吧放在:

-(void)viewDidAppear:(BOOL)animated{
self.searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 44)];

self.tableView.tableHeaderView = self.searchBar;

self.searchController = [[UISearchDisplayController alloc] initWithSearchBar:self.searchBar contentsController:self];

self.searchController.searchResultsDataSource = self;
self.searchController.searchResultsDelegate = self;
self.searchController.delegate = self;


//CGPoint offset = CGPointMake(0, self.searchBar.frame.size.height);
//self.tableView.contentOffset = offset;

self.searchResults = [NSMutableArray array];
}

过滤结果:

    -(void)filterResults:(NSString *)searchTerm {

[self.searchResults removeAllObjects];

PFQuery *query = [PFQuery queryWithClassName: @"points"];
[query whereKeyExists:@"name"]; //this is based on whatever query you are trying to accomplish
[query whereKeyExists:@"opponent"]; //this is based on whatever query you are trying to accomplish
[query whereKey:@"name" containsString:searchTerm];

NSArray *results = [query findObjects];

NSLog(@"%@", results);
NSLog(@"%u", results.count);

[self.searchResults addObjectsFromArray:results];
}

-(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString {
[self filterResults:searchString];
return YES;
}
Counting The Objects:

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

if (tableView == self.tableView) {
//if (tableView == self.searchDisplayController.searchResultsTableView) {

return self.objects.count;

} else {

return self.searchResults.count;

}

}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 110;
}

试图展示这一切!

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath object:(PFObject *)object {
// If you want a custom cell, create a new subclass of PFTableViewCell, set the cell identifier in IB, then change this string to match
// You can access any IBOutlets declared in the .h file from here and set the values accordingly
// "Cell" is the default cell identifier in a new Master-Detail Project
static NSString *CellIdentifier = @"celltag";

UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
}

if (tableView != self.searchDisplayController.searchResultsTableView) {
UILabel *game = (UILabel*) [cell viewWithTag:200];
game.text = [NSString stringWithFormat:@"V.s %@", [object objectForKey:@"opponent"]];

UILabel *points = (UILabel*) [cell viewWithTag:201];
points.text = [NSString stringWithFormat:@"Points: %@G, %@A, %@Pts, %@, %@Hits, %@PPG",[object objectForKey:@"goals"], [object objectForKey:@"assists"], [object objectForKey:@"totalpoints"], [object objectForKey:@"plusminus"], [object objectForKey:@"hits"],[object objectForKey:@"ppg"]];

UILabel *date = (UILabel*) [cell viewWithTag:250];
date.text = [object objectForKey:@"date"];

UILabel *name = (UILabel*) [cell viewWithTag:203];
name.text = [object objectForKey:@"name"];
}
if ([tableView isEqual:self.searchDisplayController.searchResultsTableView]) {


UILabel *game = (UILabel*) [cell viewWithTag:200];
game.text = [NSString stringWithFormat:@"V.s %@", [object objectForKey:@"opponent"]];

UILabel *points = (UILabel*) [cell viewWithTag:201];
points.text = [NSString stringWithFormat:@"Points: %@G, %@A, %@Pts, %@, %@Hits, %@PPG",[object objectForKey:@"goals"], [object objectForKey:@"assists"], [object objectForKey:@"totalpoints"], [object objectForKey:@"plusminus"], [object objectForKey:@"hits"],[object objectForKey:@"ppg"]];

UILabel *date = (UILabel*) [cell viewWithTag:250];
date.text = [object objectForKey:@"date"];

UILabel *name = (UILabel*) [cell viewWithTag:203];
name.text = [object objectForKey:@"name"];



}

UILabel *game = (UILabel*) [cell viewWithTag:200];
game.text = [NSString stringWithFormat:@"V.s %@", [object objectForKey:@"opponent"]];

UILabel *points = (UILabel*) [cell viewWithTag:201];
points.text = [NSString stringWithFormat:@"Points: %@G, %@A, %@Pts, %@, %@Hits, %@PPG",[object objectForKey:@"goals"], [object objectForKey:@"assists"], [object objectForKey:@"totalpoints"], [object objectForKey:@"plusminus"], [object objectForKey:@"hits"],[object objectForKey:@"ppg"]];

UILabel *date = (UILabel*) [cell viewWithTag:250];
date.text = [object objectForKey:@"date"];

UILabel *name = (UILabel*) [cell viewWithTag:203];
name.text = [object objectForKey:@"name"];


return cell;
}

最佳答案

您的 cellForRowAtIndexPath 方法中也有很多错误。

(1) 它包含一个奇怪的条件。

a. 首先,您要将指针与 != 运算符进行比较:

if (tableView != self.searchDisplayController.searchResultsTableView)

但随后您要使用 isEqual

比较对象
if ([tableView isEqual:self.searchDisplayController.searchResultsTableView])

虽然这两种方法都足够,而且这个条件在技术上应该可行,但我最好保持一致;由于 cellForRowAtIndexPath 中的 tableView 包含对指针的引用,因此使用 == 或 != 运算符不仅足够,而且速度更快。

b. 以这种方式使用两个 if 也是一种糟糕的形式,因为您对这两个选项都有 if 语句。相反,我建议使用 if-else 语句:

if (tableView != self.searchDisplayController.searchResultsTableView) {

...

} else {

...
}

return cell;

c. 就目前而言,您的条件完全没有必要。您在两个条件 block 中都有相同的代码,甚至在条件 block 之后也有相同的代码!因此,就目前而言,您可以删除这两个 if 语句,因为 if 语句之外的最后一段代码是唯一真正执行的代码。

(2) 但实际上您确实需要一个条件,即使您当前的条件是多余的。

关于为什么在使用您指定的代码时表格不会更改的最主要问题:

由于您使用的是 Parse 的 cellForRowAtIndexPath 方法,因此行数据将使用来自 - (PFQuery *)queryForTable 的信息进行填充,因此您的代码当前已编写,对象将填充此查询的结果:

PFQuery *query = [PFQuery queryWithClassName:@"points"];

当您不搜索时,您可以使用从此查询返回的 Parse PFObject 参数,但使用 self.searchResults 数组的当前索引处的对象,即 [self.searchResults objectAtIndex:indexPath.row] ,用于搜索时,例如:

if (tableView != self.searchDisplayController.searchResultsTableView) {

UILabel *game = (UILabel*) [cell viewWithTag:200];
game.text = [NSString stringWithFormat:@"V.s %@", [object objectForKey:@"opponent"]];

UILabel *points = (UILabel*) [cell viewWithTag:201];
points.text = [NSString stringWithFormat:@"Points: %@G, %@A, %@Pts, %@, %@Hits, %@PPG",[object objectForKey:@"goals"], [object objectForKey:@"assists"], [object objectForKey:@"totalpoints"], [object objectForKey:@"plusminus"], [object objectForKey:@"hits"], [object objectForKey:@"ppg"]];

UILabel *date = (UILabel*) [cell viewWithTag:250];
date.text = [object objectForKey:@"date"];

UILabel *name = (UILabel*) [cell viewWithTag:203];
name.text = [object objectForKey:@"name"];

} else {

PFObject *searchResult = [self.searchResults objectAtIndex:indexPath.row];

UILabel *game = (UILabel*) [cell viewWithTag:200];
game.text = [NSString stringWithFormat:@"V.s %@", [searchResult objectForKey:@"opponent"]];

UILabel *points = (UILabel*) [cell viewWithTag:201];
points.text = [NSString stringWithFormat:@"Points: %@G, %@A, %@Pts, %@, %@Hits, %@PPG",[searchResult objectForKey:@"goals"], [searchResult objectForKey:@"assists"], [searchResult objectForKey:@"totalpoints"], [searchResult objectForKey:@"plusminus"], [searchResult objectForKey:@"hits"], [return cell; objectForKey:@"ppg"]];

UILabel *date = (UILabel*) [cell viewWithTag:250];
date.text = [searchResult objectForKey:@"date"];

UILabel *name = (UILabel*) [cell viewWithTag:203];
name.text = [searchResult objectForKey:@"name"];
}

return cell;

关于ios - UITableview 搜索解析 - 无结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25003370/

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