使用NSFetchedResultsController从核心数据模型中获取谓词到部分

时间:2012-08-31 17:55:17

标签: objective-c ios uitableview core-data nsfetchedresultscontroller

我一直在回答这个问题Here

尝试实施我自己的解决方案。不知何故,我没有得到任何部分。只有行。

在这种情况下

3行......但是没有章节。至少应该有2个部分。 2个月。我知道这是因为我检查了模型并且他们在那里。

我的核心数据模型有一个实体,包含许多个月(实体)。而月也有很多天(实体

分别代表每个实体的属性分别为年份,月份,月份和日期,分别为实体

我要做的是获取所有日期的提取在给定的一个月在给定年份我可以让我的部分代表一个月和行代表天。

有人能帮助我吗?

编辑:更新代码

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];

NSEntityDescription *entity = [NSEntityDescription entityForName:@"Day" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];


NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"day_" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];

[fetchRequest setSortDescriptors:sortDescriptors];


[fetchRequest setFetchBatchSize:20];

NSFetchedResultsController *theFetchedResultsController =
[[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
                                    managedObjectContext:managedObjectContext
                                      sectionNameKeyPath:@"month.month_"
                                               cacheName:@"Root"];

我的模型看起来像这样,

enter image description here

非常感谢任何帮助。

谢谢!

努诺

2 个答案:

答案 0 :(得分:1)

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setPredicate: [NSPredicate predicateWithFormat:@"";

NSEntityDescription *entity = [NSEntityDescription entityForName:@"Day" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];

NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"Month.month_" ascending:NO];
NSSortDescriptor *sort2 = [[NSSortDescriptor alloc] initWithKey:@"day_" ascending:NO];
[fetchRequest setSortDescriptors:[NSArray arrayWithObjects:sort,sort2]];

[fetchRequest setFetchBatchSize:20];

NSFetchedResultsController *theFetchedResultsController =
[[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
                                    managedObjectContext:managedObjectContext sectionNameKeyPath:"month.month_"
                                               cacheName:@"Root"];

答案 1 :(得分:0)

立即获取所有内容并使用数组字典在返回后对其进行排序。因此,循环遍历结果并为每个部分创建一个数组,并将数组存储在为每个部分编制索引的字典中。你的词典看起来像

{ 
 {'January", "1,2,6,19,23,nil"},
 {'February", "2,7,18,19,28,nil"},
 {'March", "5,6,7,9,29,31,nil"},
 etc.
}

有一个good tutorial with code at icodeblog给出了执行此操作所需详细信息的示例。