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];
}
}