核心数据:如何获取这些托管对象?

时间:2010-06-19 17:05:14

标签: iphone core-data

我有两个实体:Department和DepartmentNews。每个部门都有一个或多个DepartmentNews Objects。在DepartmentNews内部,有一个newsTitle属性,并且有一个releaseDate属性。

我想获取所有这些Department对象,并使用相关的DepartmentNews newsTitle和最新的releaseDate对它们进行排序。

是否有可能为此做出谓词?可能是子查询?这样的事情怎么可能呢?我正在使用NSFetchedResultsController ...

2 个答案:

答案 0 :(得分:2)

您的请求没有意义。由于某个部门有多个部门新闻对象,因此无法对所有部门进行排序。您可以通过一个来设置排序,但您需要确定哪一个。

首先要定义哪些一个你想要排序的新闻项目然后你可以构建其余的。

答案 1 :(得分:1)

您如何看待提取部门,然后使用关键路径作为排序描述符。我尝试编写这个代码:

NSFetchRequest *allDepartements = [[NSFetchRequest alloc] init];
[allDepartements setEntity:[NSEntityDescription entityForName:@"departements"
inManagedObjectContext:moc]];
// now specify the sorting
NSSortDescriptor *sortDesc = [[NSSortDescriptor alloc] initWithKey:@"departementNews.date"] ascending:YES];
[allDepartements setSortDescriptors:[NSArray arrayWithObject:sortDesc]];
[sortDesc release];
// performing the fetch without an NSFetchedResultsController
NSError *error = nil;
NSArray *result = [moc executeFetchRequest:allDepartements error:&error];
[allDepartements release];

您得到的是按最新新闻条目排序的一系列部门。然后,您可以使用KVC简单地获取新闻。

要立即使用NSFetchedResultsController,您只需替换执行fetch的lase块,并通过以下代码块保存到数组中:

NSFetchedResultsController *controller = [[NSFetchedResultsController alloc] 
initWithFetchRequest:allDepartements
managedObjectContext:moc 
sectionNameKeyPath:nil 
cacheName:@"<#Cache name#>"];
    [allDepartementsRelease];

其余的应该按预期工作。我之前从未使用NSFetchedResultsController,我曾经在mac上手动编码。