0

私のプロジェクトでは、魔法の記録を持つコアデータを使用しています。

私の検索バーは完全に機能しますが、検索後にテーブルビューの最初の行をタップすると、フィルタリングされていないテーブルの詳細ビューが表示されます。

したがって、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;
4

2 に答える 2

0

showInRow は int を受け入れるので、使用します

indexPath.row
于 2013-07-03T10:56:33.177 に答える
0

あなたのコードには多くの問題があります。たとえば、メソッドgiveMeSearchedObjectはインデックス パスを返す必要がありますが、代わりにRicetta. 忘れてしまうのが一番です。

「初心者」にとって「より簡単」にするはずのサードパーティのフレームワークの問題は、通常、文書化が不十分なことです。多くの場合、単純化または抽象化の点でほとんど追加されません。これには MR が含まれます。あなたの場合NSFetchedResultsController、検索用語で更新できるプレーンなバニラを使用しないと、まったく何も得られません.

ストーリーボードを使用していて、セルの選択をキャッチする場合は、テーブル ビュー セルであるprepareForSegue管理対象オブジェクトにアクセスする必要があります。sender

UITableViewCell *cell = (UITableViewCell*)sender;
NSIndexPath *indexPath = [self.tableView indexPathForCell:cell]; 
Ricetta *ricetta = [self.fetchedResultsController objectAtIndexPath:indexPath]; 
于 2013-07-03T13:24:44.117 に答える