filterPath of filtered tableView

时间:2013-07-03 10:55:06

标签: ios core-data uisearchbar segue magicalrecord

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

我的搜索栏工作正常,但搜索后如果点击我的桌面视图的第一行,我会得到未过滤的表格的详细视图:

所以,如果我有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;

2 个答案:

答案 0 :(得分:0)

showInRow接受一个int所以使用

indexPath.row

答案 1 :(得分:0)

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

第三方框架应该让“初学者”变得“更容易”的问题在于它们通常记录得很糟糕。通常,它们在简化或抽象方面几乎没有增加 - 这包括MR。在你的情况下,你没有使用普通的香草NSFetchedResultsController,你可以用你的搜索词来更新。

如果您正在使用故事板并在prepareForSegue中捕获单元格选择,则必须通过sender(表格单元格)来访问托管对象:

UITableViewCell *cell = (UITableViewCell*)sender;
NSIndexPath *indexPath = [self.tableView indexPathForCell:cell]; 
Ricetta *ricetta = [self.fetchedResultsController objectAtIndexPath:indexPath];