Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.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
Ios 对数组中的数据进行排序_Ios_Objective C_Sorting_Core Data - Fatal编程技术网

Ios 对数组中的数据进行排序

Ios 对数组中的数据进行排序,ios,objective-c,sorting,core-data,Ios,Objective C,Sorting,Core Data,我有一个来自我想要排序的核心数据的数组,使用我添加到数据库中的orderNum字段(Sceneentity) 我提出以下请求以获取数据: NSArray *scenes; NSManagedObjectContext *context = [self managedObjectContext]; NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; NSEntityDescription *entity = [NSEnti

我有一个来自我想要排序的核心数据的数组,使用我添加到数据库中的
orderNum
字段(
Scene
entity)

我提出以下请求以获取数据:

NSArray *scenes;

NSManagedObjectContext *context = [self managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];

NSEntityDescription *entity = [NSEntityDescription entityForName:@"Scenes" inManagedObjectContext:context];

[fetchRequest setEntity:entity];
NSError *error;

scenes = [context executeFetchRequest:fetchRequest error:&error];
return scenes;

如何按照
orderNum
场景中返回的数据进行排序?

使用
nssortddescriptor
orderNum
作为
键,并将排序描述符应用于
获取请求

NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"orderNum" ascending:YES];
[fetchRequest setSortDescriptors:@[ sort ]];

最好的方法是从已排序的数据库中检索数据。检查@Wain的答案

但是,也可以将数据排序到字典的
NSArray

NSSortDescriptor *sceneDescriptor = [[NSSortDescriptor alloc] initWithKey:@"orderNum" ascending:YES];
NSArray * sortDescriptors = [NSArray arrayWithObject: sceneDescriptor];
NSArray *sortedArray = [scene sortedArrayUsingDescriptors:sortDescriptors];

NSLog(@"sortedArray = %@", sortedArray);

是的,这是正确的方法-值得注意的是,让SQL引擎作为获取的一部分进行排序将比检索数据然后在代码中进行排序更快、更高效。特别是如果您在SQL land中对具有索引的列进行排序…您知道如何访问SQL引擎吗?您无法通过核心数据直接访问SQL。调用
executeFetchRequest:
将获取请求转换为SQL并(私下)运行。为什么在调用数据库时不进行排序?这是我正在维护的预构建应用程序。我无法确定在数据库中调用此表的查询的位置。就像我修改SQL以按orderNum排序一样。你知道,我如何在程序中跟踪它吗?@user3473089如果你现在正在维护这段代码,那么最重要的事情就是阅读。