32

我在 NSSet 中有数据,我需要将其放入 NSArray。

我需要自己对其进行排序(同样,这来自 Core Data)还是可以按排序顺序将其取出?

4

2 回答 2

77

NSFetchRequest通过将属性设置为ssortDescriptors数组,可以在使用 an 检索数据时指定排序。NSSortDescriptor但是,如果您已经拥有它NSSet并且不想发出另一个 fetch 请求,您可以使用:

[[theSet allObjects] sortedArrayUsingDescriptors:sortDescriptors];

NSArray它会在您调用时创建一个临时allObjects数组,然后创建另一个排序数组,因此它不是 100% 有效的,但对于合理大小的数据集,开销应该可以忽略不计(当然低于排序的成本)。

编辑

实际上,我错了 - NSSet 也有sortedArrayUsingDescriptors:方法。因此,您可以一次调用[theSet sortedArrayUsingDescriptors:descriptors]并完成所有操作。

于 2010-04-20T04:57:36.613 回答
8

你必须自己整理它,但这并不难......

NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Sprocket" inManagedObjectContext:managedObjectContext];
[request setEntity:entity];

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

NSError *error;
NSMutableArray *mutableFetchResults = [[managedObjectContext executeFetchRequest:request error:&error] mutableCopy];    
self.sprocketArray = mutableFetchResults;

[sortDescriptors release];
[sortDescriptor release];
[mutableFetchResults release];
[request release];
于 2010-04-20T04:58:08.973 回答