我遇到了一个应该非常基本并且有明显答案的问题,并且我已经阅读了一些 Apple 的文档以及此处的答案和在线教程。
我有一个显示“月”实体列表的表格视图(应用程序使用核心数据)。它连接到另一个表格视图,我想显示该父月份中包含的所有日期的列表。因此,在“月份”实体列表中点击一行,理想情况下只列出一月份的日子。
Month 和 Days 表视图都与常规视图控制器(不是 tableview VC)有一个单独的 segue,它分别添加了 Month 条目和 Day 条目。
数据经过建模,因此 Month 具有以 Days 为目标的一对多关系 (daysInMonths),而反之则是一对一关系 (parentMonth)。
月份属性是“月”和“年”。天属性是“月”、“日”和“年”。
模型对象上的所有属性当前都是字符串(不理想,但我将在下一个练习中更改它)。
我可以添加月份和日期条目。我可以删除它们。问题是,当我点击第一个表视图(月)中的一行时,它会显示每天的条目,根本没有过滤。
我假设当我在 Days tableview .m 文件中设置获取的结果控制器时,我将使用谓词仅过滤与给定父月份匹配的日期。
我在这个 tableview 中的 fetch 请求是在 Days 对象上的。设置谓词时,我是否必须在该 fetch 方法中实例化 Month 对象?
当我想要做的只是设置“parentMonth”关系以正确关联数据时,我不想创建一个显示在 tableview 中的附加 Model 对象。
我从概念上理解关系的概念,但我有点不清楚如何在代码中实际设置它们。
设置这种过滤器的最佳位置是什么?
我意识到我可能不够清楚,所以我会尽我所能回答任何其他问题。
我知道我缺少一些基本的东西,因为这种功能到处都在使用,但是我自己的阅读还没有让我明白这一点......
@implementation DaysCDTVC
- (void)setupFetchedResultsController
{
// 1 - Get Entity
NSString *entityName = @"Days";
NSLog(@"Setting up a Fetched Results Controller for the Entity named %@", entityName);
// 2 - Request
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:entityName];
// 3 - Filter
//request.predicate = [NSPredicate predicateWithFormat: ????????????????
// 4 - Sort
request.sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"month"
ascending:YES
selector:@selector(localizedCaseInsensitiveCompare:)]];
//5 - Fetch
self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request
managedObjectContext:self.managedObjectContext
sectionNameKeyPath:nil
cacheName:nil];
[self performFetch];
}
“performFetch”方法在关联的类中。这与 Paul Hegarty 在斯坦福 iTunes 讲座中所教的内容基本相同。