Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone NSSet的NSArray-我必须自己排序吗?_Iphone_Sorting_Nsarray_Nsset - Fatal编程技术网

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

Iphone NSSet的NSArray-我必须自己排序吗?,iphone,sorting,nsarray,nsset,Iphone,Sorting,Nsarray,Nsset,我有一个NSSet中的数据,我需要把它放到NSArray中 我需要自己对它进行排序(同样,它来自核心数据)还是可以按排序顺序将其取出?当使用NSFetchRequest检索数据时,可以通过将sortDescriptors属性设置为NSSortDescriptor的数组来指定排序。但是,如果您在NSSet中已经有了它,并且不想发出另一个提取请求,则可以使用: [[theSet allObjects] sortedArrayUsingDescriptors:sortDescriptors]; 当您

我有一个NSSet中的数据,我需要把它放到NSArray中


我需要自己对它进行排序(同样,它来自核心数据)还是可以按排序顺序将其取出?

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

[[theSet allObjects] sortedArrayUsingDescriptors:sortDescriptors];
当您调用
allObjects
时,它将创建一个临时
NSArray
,然后再创建另一个排序数组,因此它的效率不是100%,但是对于大小合理的数据集来说,开销应该可以忽略不计(当然比排序的成本要低)

编辑
实际上,我错了-NSSet也有使用描述符的
sortedarray:
方法。因此,您只需调用
[theSet-SorterDarray Using descriptors:descriptors]
即可完成所有操作。

您必须自己进行排序,但这并不难

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];

您的意思是OP必须自己对数据进行排序,但您提供的示例使用CoreData的NSSortDecriptior功能——我将重新表述答案并说;让CoreData在获取数据时为您进行排序答案的一部分是,您无法按排序顺序从集合中获取NSArray,因此您必须自己对其进行排序,或者在从Core Data中获取可变数组时,在构建集合后保留副本,因此,您可以在必要时使用该排序副本。因此,对于描述符:'NSSortDescriptor*sortDescriptor=[[NSSortDescriptor alloc]initWithKey:@“name”升序:YES];NSArray*sortedArray=[使用描述符设置sortedArray:@[sortDescriptor]];'