多个表视图中的不同NSpredicates

时间:2013-02-05 19:39:31

标签: uitableview core-data nspredicate nsfetchedresultscontroller nsfetchrequest

我无法停止搜索和阅读“更改谓词”但我仍然不知道如何解决我的问题,所以...我拥有的是:

1 - 包含各种单元格和每个单元格的多个表格视图具有多个文本字段。

2 - 用户按下其中一个文本字段,并出现一个tableview(在弹出窗口内)。

3 - 这个popoverTableview将所有核心数据“工作”,并且假设提供要在压缩文本字段中插入的数据。

4 - 一切正常......除了每次用户从tableview1传递到tableview2时我需要更改谓词的事实。

5 - 下面是我在我的popoverTableview中的NSFetchedResultsController方法,我尝试了很多方法,如:“if's”; “开关”;也指向tableviews中的textfield标记,什么也没有。我想我不需要将缓存设置为nil,因为它已经设置为nil ...也尝试删除:if(_fetchedResultsController!= nil)return _fetchedResultsController;

没什么!!!,我需要了解什么?我没有得到什么?我在这一天失去了几天.HELP!

- (NSFetchedResultsController *)fetchedResultsController
{
if (_fetchedResultsController != nil)
{
    return _fetchedResultsController;
}

NSFetchRequest *fetchRequestList = [[NSFetchRequest alloc] init];
NSEntityDescription *entityList = [NSEntityDescription entityForName:@"List" inManagedObjectContext:self.managedObjectContext];
[fetchRequestLista setEntity:entityList];

TableViewOne *table1 = [[Cobertura alloc]init];
TableViewTwo *table2 = [[Cobertura alloc]init];    

if (table1 textFieldShouldBeginEditing:table1.textFieldPressed)
{
fetchRequestList.predicate = [NSPredicate predicateWithFormat:@"%K IN %@", @"reference", arrayTableview1];
}

if (table2 textFieldShouldBeginEditing:table2.textFieldPressed)
{
fetchRequestList.predicate = [NSPredicate predicateWithFormat:@"%K IN %@", @"reference", arrayTableview2];
}

NSSortDescriptor *cellTitle = [[NSSortDescriptor alloc] initWithKey:@"reference" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:cellTitle, nil];
[fetchRequestLista setSortDescriptors:sortDescriptors];

_fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequestLista managedObjectContext:self.managedObjectContext sectionNameKeyPath:@"referencia" cacheName:nil];
_fetchedResultsController.delegate = self;
self.fetchedResultsController = _fetchedResultsController;

return _fetchedResultsController;
}

提前致谢

1 个答案:

答案 0 :(得分:1)

你只需要明确地使你的FRC无效。然后让FRC执行提取。

FRC的自定义getter方法看起来很好。它确保tableview1和tableview2的谓词不同,并相应地构造FRC。但只有FRC为零时才能完成所有这些工作。如果没有,它只返回后备实例变量_fetchedResultsController,其余代码根本不执行;这就是为什么在切换表视图时需要明确地使你的FRC无效的原因。