0

在我的项目中,我使用带有神奇记录的核心数据。

我的搜索栏运行良好,但搜索后如果我点击我的表格视图的第一行,我会得到未过滤的表格的详细视图:

所以如果我有 3 个名为 A、B、C 的对象并搜索 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

您的代码有很多问题。例如,您的方法giveMeSearchedObject应该返回一个索引路径,而是返回一个Ricetta. 最好忘记它。

应该使“初学者”“更容易”的 3rd 方框架的问题在于它们通常没有很好的文档记录。通常,它们在简化或抽象方面几乎没有添加 - 这包括 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 回答
0

showInRow 接受一个 int 所以使用

indexPath.row
于 2013-07-03T10:56:33.177 回答