2014-03-28 28 views
0

我有一個數組來自核心數據,我想使用我添加到數據庫(Scene實體)的orderNum字段進行排序。排序數組中的數據

我提出以下要求得到數據:

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; 

我該如何去有關排序由orderNumscenes返回的數據?

+0

爲什麼你不排序,同時調用數據庫? –

+0

這是我正在維護的預建應用程序。我找不到數據庫中該表的查詢被調用的位置。就像我會修改SQL按orderNum排序。任何想法,我如何能夠在程序中追蹤它? – user3473089

+0

檢查我的答案 –

回答

1

使用帶有orderNumkeyNSSortDescriptor等諸如此類的描述符適用於您的fetchRequest

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

是的,這是正確的方法 - 值得注意的是,使用SQL引擎作爲提取的一部分進行排序將比取回數據然後在代碼中進行排序的速度更快,效率更高。特別是如果你在SQL-land中有一個索引的列進行排序... – RobP

+0

你知道我如何訪問SQL引擎嗎? – user3473089

+0

您無法通過核心數據直接訪問SQL。調用'executeFetchRequest:'將獲取請求轉換爲SQL並運行(私人)。 – Wain

0

最好的方法是從數據庫中檢索數據排序。檢查@Wain答案。

但是,可以對數據進行排序到字典的NSArray,太:

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

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