我正在使用“SearchBar和搜索显示控制器”在UITableView(tblFriends)中实现搜索栏
这是我的字典的NSarray filteredFriendsList(等于friendsList NSarray):
{
gender
id
name
picture
}
我在UIViewController中有表视图(不在tableViewController中),因为该表只占用一半视图。
这是代码: INTERFACE:
#import <UIKit/UIKit.h>
#import "ClasseSingleton.h"
#import "FBConnect.h"
@interface ViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>
{
NSArray *friendsList;
NSDictionary *friendsDict;
NSMutableArray *filteredFriendsList;
IBOutlet UITableView *tblFriends;
}
@property (nonatomic, retain) NSArray *friendsList;
@property (nonatomic, retain) NSMutableArray *filteredFriendsList;
-(void)getFriends;
@end
实施
#import "ViewController.h"
@implementation ViewController
@synthesize friendsList, filteredFriendsList;
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
[tblFriends setDelegate:self];
[tblFriends setDataSource:self];
}
- (void)getFriends{
NSLog(@"ENTRATO - getFriends");
//Copy ARRAY in other ARRAY
friendsList = [NSArray arrayWithArray:[ClasseSingleton getFriends]];
filteredFriendsList = [NSArray arrayWithArray:[ClasseSingleton getFriends]];
NSLog(@"getFriends : DESCRIPTION\n\n %@", [friendsList description]);
NSLog(@"Count friendslist: %i", [friendsList count]);
[tblFriends reloadData];
}
// *****TABLE MANAGEMENT***** //
//Nuber of cells
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
NSLog(@"tabella1");
return [filteredFriendsList count];
}
//Populate the table
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPat{
static NSString * cellIdentifier = @"cell";
//Set Style cell
UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (cell == nil){
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
}
friendsDict = [filteredFriendsList objectAtIndex:indexPat.row];
//Set CELL TEXT
NSString *cellValue = [friendsDict objectForKey:@"name"];
NSLog(@"TBL %@", cellValue);
[cell.textLabel setText:cellValue];
return cell;
}
// SEARCH IN TABLE
- (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;
}
- (void)searchBarCancelButtonClicked:(UISearchBar *)saearchBar {
[self.filteredFriendsList removeAllObjects];
[self.filteredFriendsList addObjectsFromArray: friendsList];
}
- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope{
/*
Update the filtered array based on the search text and scope.
*/
[self.filteredFriendsList 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.
*/
NSString *cellTitle;
for (cellTitle in friendsList){
// for (cellTitle in [friendsDict objectForKey:@"name"]){
NSComparisonResult result = [cellTitle compare:searchText options:NSCaseInsensitiveSearch range:NSMakeRange(0, [searchText length])];
if (result == NSOrderedSame){
[filteredFriendsList addObject:cellTitle];
}
}
}
...
@end
每当我在搜索栏中放置一些字符时,应用程序就会出现此错误:
'NSInvalidArgumentException',原因:' - [__ NSCFDictionary compare:options:range:]:无法识别的选择器发送到实例
我希望能解决这个问题,这是第6天出现此错误。
谢谢。
答案 0 :(得分:4)
您声明filteredFriendsList
为NSMutableArray
,但您在此处为其分配了一个不可告知的NSArray
:
filteredFriendsList = [NSArray arrayWithArray:[ClasseSingleton getFriends]];
将其更改为:
filteredFriendsList = [NSMutableArray arrayWithArray:[ClasseSingleton getFriends]];