NSPredicatesearch栏不起作用

我已经通过一个search栏来编辑朋友。 我的添加/删除的朋友工作正常,但我用SEARCHBAR添加/删除朋友有问题…我的search栏find我正在窃听的电子邮件,但订单更改:如果我find2电子邮件与我的search栏,这2封电子邮件将是我的属性“Allfriend”中的第一封电子邮件,而不是我find的电子邮件与search栏…是否有任何代码在NSLog后didSelectRowAtIndexPath完成?

我让你看看我的代码,告诉我,如果你看到一个问题:

editfriend.h:

#import <UIKit/UIKit.h> #import <Parse/Parse.h> @interface EditFriendsViewController : UITableViewController <UISearchBarDelegate, UISearchDisplayDelegate> @property (nonatomic, strong) NSArray *allUsers; @property (nonatomic, strong) PFUser *currentUser; @property (nonatomic, strong) NSMutableArray *friends; @property (strong, nonatomic) NSArray *searchResults; @property (nonatomic, strong) PFUser *user; @property (nonatomic, strong) NSMutableArray *filteredArray; @property (nonatomic, strong) UIImage *MindleNav; -(BOOL)isFriend:(PFUser*)user; @end 

editfriend.m:

 #import "EditFriendsViewController.h" @interface EditFriendsViewController () @end @implementation EditFriendsViewController - (void)viewDidLoad { [super viewDidLoad]; self.navigationItem.titleView = [[UIImageView alloc] initWithImage:self.MindleNav]; self.searchResults = [[NSArray alloc] init]; PFQuery *query = [PFUser query]; [query orderByAscending:@"email"]; [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) { if (error) { NSLog(@"Error: %@ %@", error, [error userInfo]); } else { self.allUsers = objects; // self.user = [objects objectAtIndex:0]; [self.tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO]; } }]; self.currentUser = [PFUser currentUser]; } #pragma mark - Table view data source - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { // Return the number of sections. return 1; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { // Return the number of rows in the section. if (tableView == self.searchDisplayController.searchResultsTableView) { return [self.searchResults count]; } else { return [self.allUsers count]; } } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell"; UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; PFUser *user = [self.allUsers objectAtIndex:indexPath.row]; if (tableView == self.searchDisplayController.searchResultsTableView) { cell.textLabel.text = [[self.searchResults objectAtIndex:indexPath.row] email]; } else { cell.textLabel.text = user.email; } if ([self isFriend:user]) { cell.accessoryType = UITableViewCellAccessoryCheckmark; } else { cell.accessoryType = UITableViewCellAccessoryNone; } return cell; } #pragma mark - Table view delegate - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { [self.tableView deselectRowAtIndexPath:indexPath animated:NO]; UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; PFRelation *friendsRelation = [self.currentUser relationforKey:@"friendsRelation"]; PFUser *user = [self.allUsers objectAtIndex:indexPath.row]; if (tableView == self.searchDisplayController.searchResultsTableView) { NSLog(@"CLICK search"); cell.accessoryType = UITableViewCellAccessoryNone; } else { NSLog(@"CLICK"); } if ([self isFriend:user]) { cell.accessoryType = UITableViewCellAccessoryNone; for(PFUser *friend in self.friends) { if ([friend.objectId isEqualToString:user.objectId]) { [self.friends removeObject:friend]; break; } } [friendsRelation removeObject:user]; } else { cell.accessoryType = UITableViewCellAccessoryCheckmark; [self.friends addObject:user]; [friendsRelation addObject:user]; } [self.currentUser saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) { if (error) { NSLog(@"Error: %@ %@", error, [error userInfo]); } }]; } #pragma mark - Helper methods - (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope { NSPredicate *predicate = [NSPredicate predicateWithFormat:@"email beginswith[c] %@", searchText]; self.searchResults = [self.allUsers filteredArrayUsingPredicate:predicate]; } -(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString { [self filterContentForSearchText:searchString scope:[[self.searchDisplayController.searchBar scopeButtonTitles] objectAtIndex:[self.searchDisplayController.searchBar selectedScopeButtonIndex]]]; return YES; } - (BOOL)isFriend:(PFUser *)user { for(PFUser *friend in self.friends) { if ([friend.objectId isEqualToString:user.objectId]) { return YES; } } return NO; } @end 

你的数组(可能)包含PFUser对象,谓词是:

 [NSPredicate predicateWithFormat:@"SELF beginswith[c] %@", searchText] 

BEGINSWITH仅适用于string,并尝试将其应用于PFUser对象。 这是事故的原因。 如果要search名称以searchText开头的用户,请将谓词更改为:

 [NSPredicate predicateWithFormat:@"username beginswith[c] %@", searchText]