在我的项目中,我使用具有神奇记录的核心数据。
我的搜索栏工作正常,但搜索后如果点击我的桌面视图的第一行,我会得到未过滤的表格的详细视图:
所以,如果我有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;
答案 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];