Ios 通过NSMutableArray进行预测搜索

Ios 通过NSMutableArray进行预测搜索,ios,objective-c,uitableview,nsmutablearray,Ios,Objective C,Uitableview,Nsmutablearray,我有一个视图控制器,它从web服务检索地址信息,将其存储在可变数组中,然后在表视图中显示每个地址。我在同一个视图控制器上有一个搜索栏,我想搜索每个地址并显示结果。我使用了一个测试NSArray,但是我不确定需要对filterContentForSearchText函数做什么才能让它通过NSMutableArray进行搜索。谢谢你的帮助 对象类 // Branches.h @interface Branches : NSObject @property (nonatomic, retain)

我有一个视图控制器,它从web服务检索地址信息,将其存储在可变数组中,然后在表视图中显示每个地址。我在同一个视图控制器上有一个搜索栏,我想搜索每个地址并显示结果。我使用了一个测试NSArray,但是我不确定需要对filterContentForSearchText函数做什么才能让它通过NSMutableArray进行搜索。谢谢你的帮助

对象类

//  Branches.h

@interface Branches : NSObject
@property (nonatomic, retain) NSString *BranchAddress;
@end
视图控制器类

//  ViewController.h

@interface ViewController : UIViewController <UITableViewDataSource, UITableViewDelegate, UISearchDisplayDelegate>
@property (weak, nonatomic) IBOutlet UITableView *tableView;
@end
你可以试试这个

- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope
{
    NSArray *masterArray    = self.array; 
    NSArray *resultsArray  = [masterArray filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(Branches *evaluatedObject, NSDictionary *bindings) {
        return ([evaluatedObject.BranchAddress rangeOfString: searchText options:NSCaseInsensitiveSearch].location != NSNotFound);
    }]];
    //edited
    [self.searchResults removeAllObjects]; //self.searchResults should be mutable array 
    [self.searchResults addObjectsFromArray:resultsArray];//put the new values to searchResults

     //after this self.searchResults contains objects of filtered Branches u can get the values for example
     NSLog(@"%@", [[self.searchResults objectAtIndex:0] BranchAddress]);//self.searchResults contains objects of Branches not the string itself 

    //reload after this 
} 

我已经用你的代码更新了我的答案。数组计数确实发生了变化,这意味着代码部分正常工作。当我试图打印数组中的第一个元素时,我得到了。这不应该打印地址字符串吗?表视图上实际上没有显示任何结果。它对数组中的整个Branchs对象进行排序,而不是它本身的地址,因此您需要打印地址,如`NSLog@%@、[[searchResults objectAtIndex:0]BranchAddress];`还有wy否决票…?@user3626407我编辑了答案检查一下,wy否决票?谢谢姗,我没有投你反对票。[self.searchResults removeAllObjects];[self.searchResults addObjectsFromArray:searchResults];两者都会抛出错误。由于数组不可变,因此没有可视界面。请将self.searchResults数组更改为可变数组,因为当用户输入不同的值时,此数组会不断更改
- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope
{
    NSArray *masterArray    = self.array; 
    NSArray *resultsArray  = [masterArray filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(Branches *evaluatedObject, NSDictionary *bindings) {
        return ([evaluatedObject.BranchAddress rangeOfString: searchText options:NSCaseInsensitiveSearch].location != NSNotFound);
    }]];
    //edited
    [self.searchResults removeAllObjects]; //self.searchResults should be mutable array 
    [self.searchResults addObjectsFromArray:resultsArray];//put the new values to searchResults

     //after this self.searchResults contains objects of filtered Branches u can get the values for example
     NSLog(@"%@", [[self.searchResults objectAtIndex:0] BranchAddress]);//self.searchResults contains objects of Branches not the string itself 

    //reload after this 
}