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

Jef*_*eff 32 sorting iphone nsarray nsset

我在NSSet中有数据,我需要将它放入NSArray中.

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

Ian*_*nry 77

NSFetchRequest通过将sortDescriptors属性设置为NSSortDescriptors 数组,可以在检索数据时指定排序.但是如果您已经拥有它NSSet并且不想再发送另一个获取请求,则可以使用:

[[theSet allObjects] sortedArrayUsingDescriptors:sortDescriptors];
Run Code Online (Sandbox Code Playgroud)

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

编辑

实际上,我错了 - NSSet也有这个sortedArrayUsingDescriptors:方法.所以你可以一次打电话[theSet sortedArrayUsingDescriptors:descriptors],一起做.


bli*_*sse 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];
Run Code Online (Sandbox Code Playgroud)

  • 你是说OP必须自己对数据进行排序,但你提供的是使用CoreData的NSSortDecriptior功能的样本 - 我会重新解释并回答说; 让CoreData在获取数据时为您进行排序 (2认同)