0

いくつかのチュートリアルで何が起こるかを理解しようとしましたが、残念ながら答えが見つかりません。検索結果にnilが表示された場合に備えて、 IFがなかったことが問題である可能性があると思います。

エラー: 'NSRangeException'、理由: ' * -[__NSArrayM objectAtIndex:]: インデックス 0 が空の配列の境界を超えています'

私はその方法を使用します:

- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope
{
    //removes previos search result
    [[self searchResults]removeAllObjects];

    for (Books *book in [self.fetchResultsController fetchedObjects])
    {
            if([self searchResults] != nil)
            {
                NSComparisonResult result = [book.title compare:searchText
                                                   options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch)
                                                     range:NSMakeRange(0, [searchText length])];
                if (result == NSOrderedSame )
                {
                        [self.searchResults addObject:book];
                }
            }
        }
}

git で私の完全なプロジェクトを見つけることもできます: https://github.com/dennis87/git_bookList

編集: このように入れようとすると

if ([scope isEqualToString:@"All"] || [book.title isEqualToString:scope])

何も押さずにアプリがクラッシュする..

4

2 に答える 2

0

問題は 、検索結果がなくても常に検索結果テーブルをnumberOfSectionsInTableView返すことです。1クラッシュは次の場所で発生しtitleForHeaderInSectionます:

return [[[self searchResults] objectAtIndex:section] author];

インデックス 0 のオブジェクトは空の配列からアクセスされるためです。

したがって、検索結果配列が空の場合に返すように変更numberOfSectionsInTableViewするか、検索結果テーブルに対して別のものを返すように変更します。0titleForHeaderInSection

于 2012-11-20T18:51:08.850 に答える
0

配列からすべてのオブジェクトを削除する前に、配列にオブジェクトが含まれているかどうかを確認したい場合があります..

if(dataSourceArray){  //use your datasource array instead
    [[self searchResults]removeAllObjects];
}
于 2012-11-20T11:03:32.907 に答える