【问题标题】:Search 2 dimensional array for tableView objC在二维数组中搜索 tableView objC
【发布时间】:2015-10-14 11:27:43
【问题描述】:

我在一个数组中有一个结果列表,其中包含每个主要对象的名称和 URL。

名称是要搜索的内容,URL 是与 TableView 中的每一行一起显示的图像。

如何仅搜索和过滤第一个子对象的结果?

- (void)filterContentForSearchText:(NSString*)searchText scope: (NSString*)scope
{
    [self.searchResult removeAllObjects];
    NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"SELF contains[c] %@", searchText];

    self.searchResult = [NSMutableArray arrayWithArray: [self.TableData filteredArrayUsingPredicate:resultPredicate]];

}

这不会在搜索结果中返回任何内容。当我有一个数组时它起作用了。那么如何仅在第一个子对象而不是 URL 上搜索 TableData。

这就是我在前一个 viewController 中填充数组的方式

for(NSDictionary *eachEntry in json)
{
    NSString *entry = [eachEntry objectForKey:@"client"];
    NSString *imageEntry = [eachEntry objectForKey:@"imgLogo"];
    [_tableData addObject:[NSMutableArray arrayWithObjects:entry, imageEntry, nil]];
}

编辑

我仍然希望搜索结果包含两个对象,因为这样可以更轻松地显示正确的图像

【问题讨论】:

    标签: ios objective-c arrays uitableview


    【解决方案1】:

    如果你把词条和图片放在字典里,就可以用key搜索了。

    for(NSDictionary *eachEntry in json)
    {
        NSString *entry = [eachEntry objectForKey:@"client"];
        NSString *imageEntry = [eachEntry objectForKey:@"imgLogo"];
        [_tableData addObject:[NSMutableDictionary dictionaryWithObjectsAndKeys:entry, @"entry", imageEntry, @"imageEntry", nil]];
    }
    
    - (void)filterContentForSearchText:(NSString*)searchText scope: (NSString*)scope
    {
        [self.searchResult removeAllObjects];
        NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"entry contains[c] %@", searchText];
    
        self.searchResult = [NSMutableArray arrayWithArray: [self.TableData filteredArrayUsingPredicate:resultPredicate]];
    }
    

    【讨论】:

    • 真棒的答案老兄,这是一种享受,谢谢你的时间
    【解决方案2】:

    尝试了与您提供的相同的代码。它正确地给出过滤结果。确保您的数据已填写。

    - (void)viewDidLoad {
         [super viewDidLoad];
    
         [searchResult removeAllObjects];
    
         tableData = [[NSMutableArray alloc] init];
    
         NSString *entry = @"client";
         NSString *imageEntry = @"imageEntry";
         [tableData addObject:[NSMutableArray arrayWithObjects:entry, imageEntry, nil]];
    
    
         NSString *searchText = @"client";
         NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"SELF contains[c] %@", searchText];
    
         searchResult = [NSMutableArray arrayWithArray: [tableData filteredArrayUsingPredicate:resultPredicate]];
         NSLog(@"%@", searchResult);
    }
    

    【讨论】:

    • 哦,好的,我现在看看,我认为这也会搜索 url,无论如何要停止它,否则我会得到没有任何意义的结果。
    • 能否尝试添加更多对象,看看是否有效,只需重复这一行 [tableData addObject:[NSMutableArray arrayWithObjects:entry, imageEntry, nil]];几次。我的 TableData 肯定有数据初始化
    • 是的,向 tableData 添加了 5-6 个对象。并得到正确的结果。
    • 如何声明searchResult?我看不出我的有什么不同
    • NSMutableArray *tableData; NSMutableArray *searchResult;
    猜你喜欢
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-26
    • 2021-06-22
    • 2011-08-26
    相关资源
    最近更新 更多