0

ModalViewController に移動する追加ボタンを持つ単純な TableViewController があります。ユーザーがテキスト フィールドにテキストを追加し、保存を押して閉じると、エントリがコア データのエンティティと属性に追加され、TableViewController に表示されます。それはうまくいきます。

まず、Table View で UISearchBar を表示する別のボタンから始めました。結果を検索して戻すことができました。それは働いた。次に、TableViewController の下部に新しいタブを追加し、そこに検索バーとテーブルを取得しました。

ここで、Single Table View の上部に SearchBar を配置し、ユーザーが入力して TableView を動的に検索できるようにしたいと考えています。

現在、TableView の fetchRequest は次のようになっています (検索バーはありません)。

 NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Transaction" inManagedObjectContext:managedObjectContext];
    [fetchRequest setEntity:entity];

    NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"occasion.dateOfEvent" ascending:NO selector:@selector(localizedCaseInsensitiveCompare:)];
    [fetchRequest setSortDescriptors:[NSArray arrayWithObject:sort]];
    [fetchRequest setFetchBatchSize:20];
    //NSPredicate *pred = [NSPredicate predicateWithFormat:@"ANY whoBy.name CONTAINS[c] %@", self.searchBar.text];
    //[fetchRequest setPredicate:pred];
    NSFetchedResultsController *theFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:@"occasion.dateOfEvent" cacheName:nil];
    self.fetchedResultsController = theFetchedResultsController;
    _fetchedResultsController.delegate = self;
    return _fetchedResultsController;

私はトランザクションなどを検索しています。現在、このコードと検索バーを持つ他のView Controllerとの唯一の違いは、NSPredicateがコメント解除されているという事実です。検索はうまくいきます。このコードのコメントを外して実行すると、次のエラーが発生します。

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Invalid predicate: nil RHS'
*** First throw call stack:

TableViewController を述語なしで表示したいので、何が起こっているのか理解していますが、検索すると、その述語が有効になりました。これを機能させる方法についての助けがあれば、大歓迎です!

私の検索バーのデリゲート メソッドは次のようになります。

- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar
{
    NSError *error;
    if (![[self fetchedResultsController] performFetch:&error])
    {
        NSLog(@"Error in search %@, %@", error, [error userInfo]);
    } else
    {
        [self.tView reloadData];
        [self.searchBar resignFirstResponder];
        [noResultsLabel setHidden:_fetchedResultsController.fetchedObjects.count > 0];
    }
}
4

1 に答える 1