gpt4 book ai didi

ios - 解析.com : Searching a TableView

转载 作者:行者123 更新时间:2023-11-29 03:43:00 24 4
gpt4 key购买 nike

嘿,我正在使用 Parse我的应用程序的 SDK - 界面是在 Storyboard 中构建的...

我有一个 TableView ,它从 Parse 获取他的数据,现在我想让它可搜索。

我找到了 this post并遵循它但没有得出运行结果! :/

搜索结果已加载,但我在显示它们时遇到问题...

我收到以下错误:

... myApp[..] *** Assertion failure in -[UISearchResultsTableView _configureCellForDisplay:forIndexPath:], /SourceCache/UIKit_Sim/UIKit-2380.17/UITableView.m:5471
... myApp[...] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'UITableView dataSource must return a cell from tableView:cellForRowAtIndexPath:'

我尝试了很多,但没有得到结果,这是我的代码 - 任何人都可以帮忙:

抱歉我的英语不好! ;)

#import "FirstLaunchViewController.h"

@interface FirstLaunchViewController ()

@end

@implementation FirstLaunchViewController

#pragma mark - UIViewController
- (void)viewDidLoad {
[super viewDidLoad];

[self loadObjects];

[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"navbar_background.png"] forBarMetrics:UIBarMetricsDefault];

self.searchResults = [NSMutableArray array];

}

- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithClassName:@"teams"];
self = [super initWithCoder:aDecoder];
if (self) {
// The className to query on
self.parseClassName = @"teams";
self.textKey = @"verein";

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

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

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

self.loadingViewEnabled = NO;

// The number of objects to show per page
self.objectsPerPage = 50;
}
return self;
}

- (void)viewDidUnload {
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}

- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
}

- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
}

- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
}

- (void)viewDidDisappear:(BOOL)animated {
[super viewDidDisappear:animated];
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
// Return YES for supported orientations
return (interfaceOrientation == UIInterfaceOrientationPortrait || UIInterfaceOrientationIsLandscape(interfaceOrientation));
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath object:(PFObject *)object {

PFTableViewCell *cell = (PFTableViewCell *)[tableView dequeueReusableCellWithIdentifier:@"Cell"];

// Configure the cell

UIColor *color = [[UIColor alloc] initWithRed:0.0 green:0.0 blue:0.0 alpha:0.0];

cell.detailTextLabel.backgroundColor = color;

cell.textLabel.backgroundColor = color;

cell.backgroundView = [ [UIImageView alloc] initWithImage:[ [UIImage imageNamed:@"cellbackground_n.png"] stretchableImageWithLeftCapWidth:0.0 topCapHeight:5.0]];
cell.selectedBackgroundView = [ [UIImageView alloc] initWithImage:[ [UIImage imageNamed:@"cellbackground_down_n.png"] stretchableImageWithLeftCapWidth:0.0 topCapHeight:5.0]];
cell.accessoryView = [[ UIImageView alloc ] initWithImage:[UIImage imageNamed:@"cellarrows.png" ]];

if (tableView == self.tableView) {
cell.textLabel.text = [object objectForKey:@"verein"];
} else {

PFUser *obj2 = [self.searchResults objectAtIndex:indexPath.row];
PFQuery *query = [PFQuery queryWithClassName:@"teams"];
PFObject *searchedUser = [query getObjectWithId:obj2.objectId];
NSString *content = [searchedUser objectForKey:@"verein"];
cell.textLabel.text = content;

NSLog(@"Content: %@", content);

}

return cell;

}

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

[self.searchResults removeAllObjects];

PFQuery *query = [PFQuery queryWithClassName: self.parseClassName];
[query whereKeyExists:@"verein"]; //this is based on whatever query you are trying to accomplish
[query whereKey:@"verein" 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;
}

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
if (tableView == self.tableView) {
return self.objects.count;
} else {
return self.searchResults.count;
}
}


@end

最佳答案

问题是您的 tableView 最初没有可重用的单元格可供出队。您需要检查dequeueReusableCellWithIdentifier:返回的cell是否为nil,如果是则创建一个cell。

PFTableViewCell *cell = (PFTableViewCell *)[tableView dequeueReusableCellWithIdentifier:@"Cell"];
if (!cell)
{
cell = [[PFTableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"Cell"];
}
// Configure the cell

...

这样,您就可以保证 cell 有一个值,因此您可以避免从此方法返回 nil。

要正确处理tableView:didSelectRowAtIndexPath:,您需要首先检查哪个tableView触发了该事件,并进行相应的处理。下面是一个如何工作的示例 - 您需要替换您自己的详细 View Controller 。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if (tableView == self.tableView) {
[super tableView:tableView didSelectRowAtIndexPath:indexPath];
}
else {
PFUser *user = PFUser *obj2 = [self.searchResults objectAtIndex:indexPath.row];
MyDetailViewController *detailController = [[MyDetailViewController alloc] initWithObject:user];
[self.navigationController pushViewController:datailController animated:YES];
}
}

关于ios - 解析.com : Searching a TableView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18136436/

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