对我来说,这个问题一直是个大问题,而且我仍然坚持下去,所以我一直在跳,有人可以给我一些指导。
我拥有的是:
一切正常......但是我需要区分tableview 1或2或3中出现的数据类型......所以我知道我必须使用谓词!
我做了什么:(我尝试过其他事情)
- (NSFetchedResultsController *)fetchedResultsController
{
if (_fetchedResultsController == nil)
{
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;
}
在我的每个tableviews中,我的方法textFieldShouldBeginEditing中有一个“popoverTableview”实例:
popoverTableview = [self.storyboard instantiateViewControllerWithIdentifier:@"popoverTableview"];
popover = [[UIPopoverController alloc] initWithContentViewController:popoverTableview];
[popover presentPopoverFromRect:textField.bounds inView:textField permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];
popoverTableview.delegate = self;
popoverTableview.popView = self.popover;
所以,如果我在tableview1中,我需要[NSPredicate predicateWithFormat:@“%K IN%@”,@“reference”,arrayTableview1];
我应该创建一种我的tableviewS可以访问的方法吗?我忘了这里或不注意什么?
提前致谢,欢迎任何建议! 问候
对于遇到同样问题的每个人来说,这就是我要解决的问题:
这是在我按下特定文本字段时创建popoverview的时候:
popoverTableview = [self.storyboard instantiateViewControllerWithIdentifier:@"popoverTableview"]initWithTextFieldTag:myTextFieldThatWasPressed.tag]
popover = [[UIPopoverController alloc] initWithContentViewController:popoverTableview];
[popover presentPopoverFromRect:textField.bounds inView:textField permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];
popoverTableview.delegate = self;
popoverTableview.popView = self.popover;
popoverTableview.aIntVariable = myTextFieldThatWasPressed;
然后在我的popovertableview中:
- (id)initWithTextFieldTag:(int)textFieldTag
{
self.aIntVariable = textFieldTag;
return self;
}
然后在fetchedResultsController方法中,你只需创建简单的if告诉你想要的谓词......
此致
答案 0 :(得分:1)
如果获取的结果控制器用于弹出窗口,并且您需要知道在哪个表中选择了文本字段,我建议您在创建文本字段并创建int _currentTable
实例时标记每个文本字段变量。这样,当您调用textFieldShouldBeginEditing:
方法时,可以使用标记设置ivar的值,并在为弹出窗口创建获取结果控制器时检查该标记。
所以,而不是
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];
}
你会有
if (_currentTable == 1) {
fetchRequestList.predicate = // table one predicate
} else if (_currentTable == 2) {
fetchRequestList.predicate = // table two predicate
}
更新:
这是我从代码中覆盖init的方法。在您的popover表视图控制器实现中:
- (id)initWithTableTag:(int)tableTag
{
self = [super init];
if (self) {
_currentTable = tableTag;
}
return self;
}
(确保你还在标题中声明- (id)initWithTableTag:(int)tableTag;
。)然后,当你创建并呈现popover控制器时(我假设你在textFieldShouldBeginEditing:委托调用中):
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
// ...
YourPopoverTableViewControllerClass *vc = [[YourPopoverTableViewControllerClass alloc] initWithTableTag:textField.tag];
// ...
// display the popover
return YES;
}
不幸的是,我不知道如何使用故事板来做到这一点。