Core data 为不同的表视图设置谓词

Core data 为不同的表视图设置谓词,core-data,delegates,nspredicate,nsfetchedresultscontroller,nsfetchrequest,Core Data,Delegates,Nspredicate,Nsfetchedresultscontroller,Nsfetchrequest,这对我来说是一个大问题,我仍然坚持着,所以我希望有人能给我一些指导 我拥有的是: 3个具有多个单元格的表视图,每个单元格具有多个文本字段 每次按下这些单元格上的特定文本字段时,popover中都会出现一个tableview。这个桌面视图拥有一切!!从我的数据库中检索必要数据的核心数据方法 一切正常…但我需要区分tableview 1、2或3中应显示哪种类型的数据…所以我知道我必须使用谓词 我所做的:(我也尝试过其他事情) -(NSFetchedResultsController*)fetch

这对我来说是一个大问题,我仍然坚持着,所以我希望有人能给我一些指导

我拥有的是:

  • 3个具有多个单元格的表视图,每个单元格具有多个文本字段
  • 每次按下这些单元格上的特定文本字段时,popover中都会出现一个tableview。这个桌面视图拥有一切!!从我的数据库中检索必要数据的核心数据方法
一切正常…但我需要区分tableview 1、2或3中应显示哪种类型的数据…所以我知道我必须使用谓词

我所做的:(我也尝试过其他事情)

-(NSFetchedResultsController*)fetchedResultsController
{
if(_fetchedResultsController==nil)
{
NSFetchRequest*fetchRequestList=[[NSFetchRequest alloc]init];
NSEntityDescription*entityList=[NSEntityDescription entityForName:@“List”在managedObjectContext:self.managedObjectContext中];
[fetchRequestLista setEntity:entityList];
TableViewOne*table1=[[Cobertura alloc]init];
TableViewTwo*table2=[[Cobertura alloc]init];
如果(表1文本字段应开始编辑:表1.textFieldPressed)
{
fetchRequestList.predicate=[NSPredicate predicateWithFormat:@“%K IN%@”,“reference”,arrayTableview1];
}
如果(表2文本字段应开始编辑:表2.textFieldPressed)
{
fetchRequestList.predicate=[NSPredicate predicateWithFormat:@“%K IN%@”,“reference”,arrayTableview2];
}
NSSortDescriptor*cellTitle=[[NSSortDescriptor alloc]initWithKey:@“引用”升序:是];
NSArray*sortDescriptors=[[NSArray alloc]initWithObjects:cellTitle,nil];
[fetchRequestLista SetOrtDescriptors:sortDescriptors];
_fetchedResultsController=[[NSFetchedResultsController alloc]initWithFetchRequest:fetchRequestLista managedObjectContext:self.managedObjectContext sectionNameKeyPath:@“Referenceia”缓存名:nil];
_fetchedResultsController.delegate=self;
self.fetchedResultsController=\u fetchedResultsController;
返回_fetchedResultsController;
}
在我的每个表视图中,我的方法textFieldShouldBeginEditing中都有一个“popoverTableview”的实例:


popoverTableview=[self.storyboard实例化eviewcontrollerwhiteIdentifier:@“popoverTableview”];
popover=[[UIPopopOvercontroller alloc]initWithContentViewController:popoverTableview];
[popover presentPopoverFromRect:textField.bounds inView:textField PermittedRowDirections:UIPopoverErrorDirectionUp动画:是];
popoverTableview.delegate=self;
popoverTableview.popView=self.popover;
因此,如果我在tableview1中,我需要获取[NSPredicate predicateWithFormat:@“%K in%@”,“reference”,arrayTableview1]

我应该创建一些我的TableView可以访问的方法吗?我在这里忘记了什么或者没有注意到什么

提前谢谢,欢迎您提供任何建议! 问候

对于所有遇到与我相同问题的人,以下是我所做的解决方法:

这是当我在创建popoverview时,按下一个特定的文本字段:


popoverTableview=[self.storyboard实例化eviewcontrollerwhidentifier:@“popoverTableview”]initWithTextFieldTag:mytextfieldthastpressed.tag]
popover=[[UIPopopOvercontroller alloc]initWithContentViewController:popoverTableview];
[popover presentPopoverFromRect:textField.bounds inView:textField PermittedRowDirections:UIPopoverErrorDirectionUp动画:是];
popoverTableview.delegate=self;
popoverTableview.popView=self.popover;
popoverTableview.aIntVariable=已按下的MyTextField;
然后在我的PopOvertable视图中:

-(id)initWithTextFieldTag:(int)textFieldTag
{
self.aIntVariable=textFieldTag;
回归自我;
}
然后在fetchedResultsController方法中,您只需创建简单的if's,告诉您想要的谓词


关于

如果获取的结果控制器用于popover表,并且您需要知道文本字段是在哪个表中选择的,我建议您在创建文本字段时标记每个文本字段,并创建一个
int\u currentTable
实例变量。这样,当
文本字段应该开始编辑时:
方法是called,您可以使用标记设置ivar的值,并在为popover表创建获取结果控制器时检查该标记

因此,与其

if(table1 textfield应开始编辑:table1.textfield已按下)
{
fetchRequestList.predicate=[NSPredicate predicateWithFormat:@“%K IN%@”,“reference”,arrayTableview1];
}
如果(表2文本字段应开始编辑:表2.textFieldPressed)
{
fetchRequestList.predicate=[NSPredicate predicateWithFormat:@“%K IN%@”,“reference”,arrayTableview2];
}
你会有

if(_currentTable==1){
fetchRequestList.predicate=//表1谓词
}else if(_currentTable==2){
fetchRequestList.predicate=//表2谓词
}
更新:

这就是我如何从代码重写init的方法。在popover表视图控制器实现中:

-(id)initWithTableTag:(int)tableTag
{
self=[super init];
如果(自我){
_currentTable=tableTag;
}
回归自我;
}
(确保在标题中声明
-(id)initWithTableTag:(int)tableTag;
)然后,当您创建并呈现popover控制器时(我假设您在文本字段中执行此操作时,应开始编辑:委托调用):

-(BOOL)textField应该开始编辑:(UITextField*)textField{
// ...
YourPopoverTableViewControllerClass*vc=[[YourPopoverTableViewControllerClass alloc]initWithTableTag:te