gpt4 book ai didi

iphone - 第一次尝试动态过滤搜索数组

转载 作者:行者123 更新时间:2023-11-29 04:16:18 25 4
gpt4 key购买 nike

enter image description here我浏览了苹果教程,我正在尝试为一组单词制作简化版本。

本质上,当用户开始输入字母 a 时,我想动态显示数组中以 a 开头的所有匹配项,依此类推:

数组 1 = 汽车、飞机、空气、通风、 bean 、椅子

开始输入:汽车飞机空气通风

澳大利亚:自动

这是我的代码,但我在第一个方法的 shouldReloadTableForSearchString 处收到错误

提前给你加油

#import "otherSearchViewController.h"
#import "SearchViewController.h"
#import "AppDelegate.h"

@interface itemSearchViewController ()


@end

@implementation itemSearchViewController


@synthesize listContent, filteredListContent, savedSearchTerm, savedScopeButtonIndex, searchWasActive;
@synthesize delegate;

/*
- (id)initWithStyle:(UITableViewStyle)style
{
self = [super initWithStyle:style];
if (self) {
// Custom initialization
}
return self;
}

#pragma mark -
#pragma mark Lifecycle methods
*/

- (void)viewDidLoad
{

//[super viewDidLoad];

self.title = @"Search";

NSString *path =[[NSBundle mainBundle] pathForResource:@"possibleItems" ofType:@"plist"];
NSArray *content = [NSArray arrayWithContentsOfFile:path];
listContent =[NSArray arrayWithArray:content];
if([content count] == 0)

{
NSLog(@"nsma is empty");
}
NSLog(@"list contents%@", listContent);


// NSLog(@"list content = %@", listContent);
// create a filtered list that will contain products for the search results table.

self.filteredListContent = [NSMutableArray arrayWithCapacity:[self.listContent count]];

// restore search settings if they were saved in didReceiveMemoryWarning.
if (self.savedSearchTerm)
{
[self.searchDisplayController setActive:self.searchWasActive];
[self.searchDisplayController.searchBar setSelectedScopeButtonIndex:self.savedScopeButtonIndex];
[self.searchDisplayController.searchBar setText:savedSearchTerm];

self.savedSearchTerm = nil;
}

[self.tableView reloadData];
self.tableView.scrollEnabled = YES;
}

- (void)viewDidUnload
{
//causing problem so disabled
//self.filteredListContent = nil;
}

- (void)viewDidDisappear:(BOOL)animated
{
// save the state of the search UI so that it can be restored if the view is re-created
self.searchWasActive = [self.searchDisplayController isActive];
self.savedSearchTerm = [self.searchDisplayController.searchBar text];
self.savedScopeButtonIndex = [self.searchDisplayController.searchBar selectedScopeButtonIndex];
}

- (void)dealloc
{
[listContent release];
[filteredListContent release];

[super dealloc];
}


#pragma mark -
#pragma mark UITableView data source and delegate methods


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
/*
If the requesting table view is the search display controller's table view, return the count of
the filtered list, otherwise return the count of the main list.
*/
if (tableView == self.searchDisplayController.searchResultsTableView)
{
return [self.filteredListContent count];
}
else
{
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] autorelease];
}

/*
If the requesting table view is the search display controller's table view, configure the cell using the filtered content, otherwise use the main list.
*/
return cell;
}


- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{


/*
If the requesting table view is the search display controller's table view, configure the next view controller using the filtered content, otherwise use the main list.
*/

}

#pragma mark -
#pragma mark Content Filtering

- (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 main list for products whose type matches the scope (if selected) and whose name matches searchText; add items that match to the filtered array.
*/

for (searchText in listContent){
if ([searchText isEqualToString:scope])
{
NSComparisonResult result = [scope compare:searchText options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch) range:NSMakeRange(0, [searchText length])];

if (result == NSOrderedSame)
{
[self.filteredListContent addObject:scope];
}
}
}
}


#pragma mark -
#pragma mark UISearchDisplayController Delegate Methods


//when you start typing you get this
- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString
{
[self filterContentForSearchText:searchString scope:
[[self.searchDisplayController.searchBar scopeButtonTitles] objectAtIndex:[self.searchDisplayController.searchBar selectedScopeButtonIndex]]];

// Return YES to cause the search result table view to be reloaded.
return YES;
}


- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchScope:(NSInteger)searchOption{
[self filterContentForSearchText:[self.searchDisplayController.searchBar text] scope:
[[self.searchDisplayController.searchBar scopeButtonTitles] objectAtIndex:searchOption]];

// Return YES to cause the search result table view to be reloaded.
return YES;
}

@end

最佳答案

该数组可能是自动释放的。不要使用类方法来创建它们,而是使用实例方法,即替换NSArray *content = [NSArray arrayWithContentsOfFile:path];NSArray *content = [[NSArray alloc] initWithContentsOfFile:path];

关于iphone - 第一次尝试动态过滤搜索数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13660908/

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