0

誰かが私を助けてくれることを願っています。検索バーを実装しましたが、本来の方法で結果をフィルタリングします。問題は、フィルター処理された結果から選択すると、元の配列から選択されることです。私が読んだことから、1 つのアプローチは、フィルター処理された配列からすべてのアイテムを削除し、選択したアイテムを追加することです。もう 1 つの方法は、検索条件に一致しないすべてのアイテムを削除することです。

問題は、何時間も検索したにもかかわらず、これを行う方法がわからないことです。正しい方向への助けや指針に感謝します。

これが私のコードです:

(void)viewDidLoad
{
    [super viewDidLoad];

    self.tableView.scrollEnabled = YES;

    categories = [NSArray arrayWithObjects:
                  @"Other",
                  @"Breakfast",
                  @"Chemist",
                  @"Computer",
                  @"Dinner",
                  @"Drinks",
                  @"Entertainment",
                  @"Fuel",
                  @"Groceries",
                  @"Haircut",
                  @"Hotel",
                  @"Internet",
                  @"Laundry",
                  @"Lunch",
                  @"Meals",
                  @"Medical",
                  @"Parking",
                  @"Snacks",
                  @"Stationery",
                  @"Taxis",
                  @"Telephone",
                  @"Transport",
                  @"Travel Taxes",
                  nil];

    self.allCatgeories = categories;

    [self.tableView reloadData];

}

(void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope
{

    NSPredicate *resultPredicate = [NSPredicate 
                                    predicateWithFormat:@"SELF contains[cd] %@",
                                    searchText];

    self.searchResults = [self.allCatgeories filteredArrayUsingPredicate:resultPredicate];

}
4

1 に答える 1

0

あなたは以下を使うことができます、それは私にとってはうまくいきます:

- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope
{
[self.filteredInboxItems removeAllObjects];
/*
 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 (NSNumber *id in self.inboxItemDAO.inboxItemIDs)
{
    NSDictionary *inboxItem = [self.inboxItemDAO getInboxItem:id];
    if ([scope isEqualToString:@"bla bla 1"])
    {
        NSComparisonResult result = [[inboxItem objectForKey:@"Subject"] compare:searchText options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch) range:NSMakeRange(0, [searchText length])];
        if (result == NSOrderedSame)
        {
            [self.filteredInboxItems addObject:inboxItem];
        }
    }
    else if ([scope isEqualToString:@"bla bla2"])
    {
        NSComparisonResult result = [[inboxItem objectForKey:@"Sender"] compare:searchText options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch) range:NSMakeRange(0, [searchText length])];
        if (result == NSOrderedSame)
        {
            [self.filteredInboxItems addObject:inboxItem];
        }
    }
    else if ([scope isEqualToString:@"bla bla 3"])
    {
        NSComparisonResult result = [[inboxItem objectForKey:@"Action"] compare:searchText options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch) range:NSMakeRange(0, [searchText length])];
        if (result == NSOrderedSame)
        {
            [self.filteredInboxItems addObject:inboxItem];
        }
    }
}

}

于 2012-07-23T21:05:22.287 に答える