0

我有以下实体....


| - - 审查

我检索了一个 Person 记录列表 .... 然后我可以直接通过 Person.Reviews 引用评论记录(这很简单,无需编写任何 NSFetch 语句。)

我的问题是如何按日期对评论进行排序(评论实体中有一个日期属性)?这样当我引用 Person.Reviews 时,它们是按日期顺序排列的?

我的临时修复是在 fetch 之外对数组进行排序

NSArray *sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"startDate" ascending:YES]];

NSArray *reviewList;
reviewList = [[[NSArray alloc] initWithArray:[person.reviews allObjects]] sortedArrayUsingDescriptors:sortDescriptors];

非常感谢

4

2 回答 2

2

假设您的意思是要获取Review给定人员的实体列表,按日期排序:

您可以使用NSFetchRequest,NSPredicateNSSortDescriptor对结果排序进行过滤的核心数据提取。

例子:

NSManagedObjectContext *context = <#Get the context#>;

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Review"
    inManagedObjectContext:context];
[fetchRequest setEntity:entity];

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"person == %@", thePerson];
[fetchRequest setPredicate:predicate];

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"startDate"
    ascending:YES];
NSArray *sortDescriptors = @[sortDescriptor];
[fetchRequest setSortDescriptors:sortDescriptors];

NSError *error;
NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];
if (fetchedObjects == nil) {
    // Handle the error.
}

上面的代码假定您的Review实体有一个称为日期字段startDate和一个称为person返回该人的链接的字段。

此代码运行后,fetchedObjects包含Review按审核日期顺序排序的对象(并且仅针对感兴趣的人审核对象)。

有关更多信息,请阅读https://developer.apple.com/library/ios/documentation/DataManagement/Conceptual/CoreDataSnippets/Articles/fetching.html

于 2013-10-07T09:53:55.597 回答
0

使用NSFetchRequestandNSSortDescriptor按日期(升序或不升序)对您的实体进行排序:

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entityDesc = [NSEntityDescription entityForName:@"YourEntityName" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entityDesc];

// Sort By date
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"date" ascending:YES];
NSArray *sortDescriptors = [NSArray arrayWithObjects:sortDescriptor, nil];    

[fetchRequest setSortDescriptors:sortDescriptors];

NSArray *fetchedObjects = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error];
于 2013-10-07T09:58:02.297 回答