0

メソッドのこの部分でエラーが発生しています。これは単語フィルターで、ユーザーが a を入力すると、すべての単語が表示されます...

ユーザーが検索バーのテキストを削除し、テーブル上の何かをクリックするとエラーが発生し、範囲外の例外が発生します。

filteredListContent の出力は単一の "" エントリです。"" がプログラムをクラッシュさせないようにするには、何を実装すればよいですか?

ありがとう

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

    if ([_filteredListContent count]>0){
        NSLog(@"%i",indexPath.row);
        NSLog(@"%@",_filteredListContent);
        _searchBar.text=[self.filteredListContent objectAtIndex:indexPath.row];
        //Save to user default
4

3 に答える 3

2

何が問題を引き起こしているのかわかりませんが、指定されたコードから、選択された行が「範囲外」であるように見えます。チェックを変更します:

[_filteredListContent count] > 0

次のようなものに:

[_filteredListContent count] > indexPath.row

繰り返しますが、これは指定されたコードに基づいています。

于 2013-01-23T04:45:23.690 に答える
1

テーブル内の検索に検索表示コントローラーを使用していると思います。しかし同時に、両方のテーブルに同じ配列参照 (self.filteredListContent) を使用しています (1 つは検索結果テーブルで、もう 1 つはすべての単語を表示するために使用された元のテーブルです)。検索バーに文字を入力すると、self.filteredListContent 配列が変更されます。そのため、何かを検索すると、 self.filteredListContent が変更され (元のテーブルの読み込みに使用されたオブジェクトよりも少ないオブジェクトが含まれる可能性があります)、元のテーブルの行を選択すると、配列に存在しないインデックスのオブジェクトにアクセスしようとするとクラッシュします。 .

したがって、2 つの配列を保持することをお勧めします。元のテーブルの読み込み用と検索結果テーブル用の 1 つ

于 2013-01-23T04:43:06.357 に答える
-1

以下は単語フィルターの簡単な例です。

-(void)viewDidLoad
{
    self.listOfTemArray = [[NSMutableArray alloc] init];
    self.ItemOfMainArray = [[NSMutableArray alloc] initWithObject:@"/ArrayList/"];

    [self.listOfTemArray addObjectsFromArray:self.ItemOfMainArray];
}


#pragma mark -
#pragma mark Table view Methods

- (NSInteger)numberOfSectionsInTableView:(UITableView *)aTableView {
    // Return the number of sections.
    return 1;
}
- (NSInteger)tableView:(UITableView *)aTableView numberOfRowsInSection:(NSInteger)section {
    // Return the number of rows in the section.
    return [self.listOfTemArray count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Foobar"];
    if (cell == nil) 
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Foobar"];

        cell.selectionStyle = UITableViewCellSelectionStyleBlue;
        cell.textLabel.textColor = [UIColor blackColor];
    }

        cell.textLabel.text = [self.listOfTemArray objectAtIndex: indexPath.row];

    return cell;
}

#pragma mark -
#pragma mark SearchBar methods

- (void)searchBar:(UISearchBar *)theSearchBar textDidChange:(NSString *)searchText
{
        NSString *name = @"";
        NSString *firstLetter = @"";

    if (self.listOfTemArray.count > 0)
         [self.listOfTemArray removeAllObjects];

        if ([searchText length] > 0)
        {
                for (int i = 0; i < [self.ItemOfMainArray count] ; i = i+1)
                {
                        name = [self.ItemOfMainArray objectAtIndex:i];

                        if (name.length >= searchText.length)
                        {
                                firstLetter = [name substringWithRange:NSMakeRange(0, [searchText length])];
                                //NSLog(@"%@",firstLetter);

                                if( [firstLetter caseInsensitiveCompare:searchText] == NSOrderedSame )
                                {
                                    // strings are equal except for possibly case
                                    [self.listOfTemArray addObject: [self.ItemOfMainArray objectAtIndex:i]];
                                    NSLog(@"=========> %@",self.listOfTemArray);
                                }
                         }
                 }
         }
         else
         {
             [self.listOfTemArray addObjectsFromArray:self.ItemOfMainArray ];
         }

        [self.tblView reloadData];
}

このコードはあなたの場合に役立つかもしれません...

ありがとう:)

于 2013-01-23T04:56:09.257 に答える