2011-04-13 28 views
0

我已經通過核心數據實現了一個具有數據源的UItable。該表正常工作,正確呈現數據,鑽取下來..等在UITableview中排序數據的問題

但是,它有以下問題:它每次都以不同的順序呈現內容數據。我希望它至少按字母順序出現一致或更好。

關於爲什麼會發生這種情況的任何想法或者我應該在docuemntation中審查的特定屬性或方法?

幫助非常感謝

回答

3

您需要在您的NSFetchRequest

NSSortDescriptor *sortDescriptorName = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES selector:@selector(caseInsensitiveCompare:)]; 
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:sortDescriptorName]]; 

然後創建您的NSFetchedResultsController設置NSSortDescriptorfetchRequest對象。

這會導致您的列表按字母順序使用屬性「name」進行排序,並在排序時忽略大小寫。

0

我沒有做太多與CoreData以外的其他讀到它並查看一些例子,但我要說的是:

這聽起來像你的數據僅僅是走出CoreData的未排序,並且實際上不保證順序,除非您提供一些關於如何排序的附加提示,比如說排序描述符或其他內容。

對不起,我不能提供具體的參考,但必須有一種方法來獲取數據並指定它返回的順序。另外,你可以(在幕後)從CoreData中獲取所有表數據,然後自己對其進行排序,但我認爲這首先破壞了使用CoreData的目的,並放棄了很多CoreData的功能,可能會比您自己編寫數據的任何內容更有效率。

1

您可以簡單地向請求添加排序描述符。在這個例子中,數據對象有一個「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]; 
} 
+0

感謝您的提示! – jason 2011-04-13 21:12:50