来自NSSet的NSArray - 我必须自己排序吗?

时间:2010-04-20 04:47:33

标签: iphone sorting nsarray nsset

我在NSSet中有数据,我需要把它放到NSArray中。

我是否需要自己排序(再次,这来自Core Data)或者我可以按排序顺序将其排除吗?

2 个答案:

答案 0 :(得分:77)

通过将NSFetchRequest属性设置为sortDescriptors的数组,可以在使用NSSortDescriptor检索数据时指定排序。但是,如果您已经在NSSet中使用它并且不想再提取其他请求,则可以使用:

[[theSet allObjects] sortedArrayUsingDescriptors:sortDescriptors];

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

修改

实际上,我错了 - NSSet也有sortedArrayUsingDescriptors:方法。所以你可以打电话给[theSet sortedArrayUsingDescriptors:descriptors]并一次性完成。

答案 1 :(得分: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];