我已經通過核心數據實現了一個具有數據源的UItable。該表正常工作,正確呈現數據,鑽取下來..等在UITableview中排序數據的問題
但是,它有以下問題:它每次都以不同的順序呈現內容數據。我希望它至少按字母順序出現一致或更好。
關於爲什麼會發生這種情況的任何想法或者我應該在docuemntation中審查的特定屬性或方法?
幫助非常感謝
我已經通過核心數據實現了一個具有數據源的UItable。該表正常工作,正確呈現數據,鑽取下來..等在UITableview中排序數據的問題
但是,它有以下問題:它每次都以不同的順序呈現內容數據。我希望它至少按字母順序出現一致或更好。
關於爲什麼會發生這種情況的任何想法或者我應該在docuemntation中審查的特定屬性或方法?
幫助非常感謝
您需要在您的NSFetchRequest
NSSortDescriptor *sortDescriptorName = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES selector:@selector(caseInsensitiveCompare:)];
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:sortDescriptorName]];
然後創建您的NSFetchedResultsController設置NSSortDescriptor與fetchRequest
對象。
這會導致您的列表按字母順序使用屬性「name」進行排序,並在排序時忽略大小寫。
我沒有做太多與CoreData以外的其他讀到它並查看一些例子,但我要說的是:
這聽起來像你的數據僅僅是走出CoreData的未排序,並且實際上不保證順序,除非您提供一些關於如何排序的附加提示,比如說排序描述符或其他內容。
對不起,我不能提供具體的參考,但必須有一種方法來獲取數據並指定它返回的順序。另外,你可以(在幕後)從CoreData中獲取所有表數據,然後自己對其進行排序,但我認爲這首先破壞了使用CoreData的目的,並放棄了很多CoreData的功能,可能會比您自己編寫數據的任何內容更有效率。
您可以簡單地向請求添加排序描述符。在這個例子中,數據對象有一個「sortOrder」的數字列,但是你可以對大多數東西進行排序。
- (NSMutableArray *)loadData {
NSManagedObjectContext *context = [self managedObjectContext];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"NameOfEntity" inManagedObjectContext:context];
[request setEntity:entity];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"sortOrder" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[request setSortDescriptors:sortDescriptors];
[sortDescriptors release];
[sortDescriptor release];
NSError *error = nil;
NSMutableArray *mutableFetchResults = [[context executeFetchRequest:request error:&error] mutableCopy];
if (mutableFetchResults == nil) {
// Handle the error.
}
[request release];
return [mutableFetchResults autorelease];
}
感謝您的提示! – jason 2011-04-13 21:12:50