[英]What is the best way to store data sets for graphing in Core Data?
[英]What is the best way to sort a Core Data Entity?
我有一個完全工作的核心數據模型,但是當我使用獲取請求返回數據時,它看起來是一個看似隨機的順序。 排序此數據的最佳方法是什么? 是在Core Data模型中使用另一個表,還是'查詢'第一個? 或者是將數據下拉到數組中,然后按這種方式排序?
我不太確定如何做其中任何一個,這就是我問這個問題的原因。
你的問題很普遍,但我會試着給你一些提示。
使用NSFetchRequest
類時,可以指定排序描述符。
來自Apple doc:
一組排序描述符(
NSSortDescriptor
實例),用於指定返回對象的排序方式,例如按姓氏,然后按名字排序。
在這里,您可以在Core Data Snippets doc中找到一個簡單的示例
NSManagedObjectContext *context = <#Get the context#>;
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"<#Entity name#>"
inManagedObjectContext:context];
[fetchRequest setEntity:entity];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"<#Sort key#>"
ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
NSError *error = nil;
NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];
if (fetchedObjects == nil) {
// Handle the error
}
// release allocated objects if you don't use ARC
哪里
<#Entity name#>是您要檢索的實體的名稱,例如Manager
。
<#Sort key#>是請求將用於訂購的密鑰的name
,例如, name
是Manager
實體的屬性。
所以,在我的例子中:
NSSortDescriptor *sortByName = [[NSSortDescriptor alloc] initWithKey:@"name"
ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortByName, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
由於setSortDescriptors:
設置了一個排序描述符數組,因此您可以指定要排序的多個鍵。 例如,指定對name
和salary
進行排序。 排序描述符按它們在sortDescriptors數組中出現的順序應用。 所以,在我的例子中,首先是name
,然后是salary
。
所以,在我的例子中,它可能成為
NSSortDescriptor *sortByName = [[NSSortDescriptor alloc] initWithKey:@"name"
ascending:YES];
NSSortDescriptor *sortBySalary = [[NSSortDescriptor alloc] initWithKey:@"salary"
ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortByName, sortBySalary, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
希望有所幫助。
編輯
由於fetchedObjects
包含NSManagedObject
(我想你沒有更改請求的結果類型),你需要像下面這樣迭代:
for(NSManagedObject* currentObj in fetchedObjects) {
NSLog(@"Print the name %@", [currentObj valueForKey:@"name"]);
}
因此,您需要通過鍵值編碼訪問屬性或關系。 為了讓您的生活更輕松,您可以考慮為您創建的實體創建NSManagedObject
子類,例如組織core-data-for-ios 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.