私のプロジェクトでは、魔法の記録を持つコアデータを使用しています。
私の検索バーは完全に機能しますが、検索後にテーブルビューの最初の行をタップすると、フィルタリングされていないテーブルの詳細ビューが表示されます。
したがって、A、B、C という名前の 3 つのオブジェクトがあり、C を検索すると、テーブルには C しか表示されませんが、タップすると A の詳細ビューが表示されます。
そこで、正しい indexPath を取得するメソッドを作成しようとしています。
-(NSIndexPath*)giveMeSearchedObject:(UISearchBar*)searchBar showInRow: (int) row
{
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"nome CONTAINS [cd] %@", searchBar];
NSArray *arra = [Ricetta MR_findAllSortedBy:@"nome" ascending:YES withPredicate:predicate];
Ricetta*ctn = arra[row];
NSIndexPath* correctPath =arra[row];
return correctPath;
}
しかし、prepareForSegue でこのメソッドを呼び出して indexPath を設定すると、「showInRow:」の後に何を書き込むかわかりません。
if (searching == YES) {
NSIndexPath *indexPath = [[NSIndexPath alloc]init];
indexPath = [[DataManager sharedClass]giveMeSearchedObject:self.mySearchBar.text showInRow:???;
DetailViewController*dvc = segue.destinationViewController;
dvc.indice =indexPath.row;
したがって、方法が正しくない可能性があります。
誰かが私を助けることができますか?
アップデート
@interface
@property (nonatomic, retain) NSFetchedResultsController *fetchedResultsController;
@end
@implementation
@synthesize fetchedResultsController;
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"showDetail"]) {
if (searching == YES) {
UITableViewCell*cell = (UITableViewCell*)sender;
NSIndexPath*indexPath = [self.tableView indexPathForCell:cell];
Ricetta*ricetta = [self.fetchedResultsController objectAtIndexPath:indexPath];
DetailViewController*dvc = segue.destinationViewController;
dvc.indice =indexPath.row;