在UITableview中排序数据的问题

问题描述:

我已经通过核心数据实现了一个具有数据源的UItable。该表正常工作,正确呈现数据,钻取下来..等在UITableview中排序数据的问题

但是,它有以下问题:它每次都以不同的顺序呈现内容数据。我希望它至少按字母顺序出现一致或更好。

关于为什么会发生这种情况的任何想法或者我应该在docuemntation中审查的特定属性或方法?

帮助非常感谢

您需要在您的NSFetchRequest

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

然后创建您的NSFetchedResultsController设置NSSortDescriptorfetchRequest对象。

这会导致您的列表按字母顺序使用属性“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]; 
} 
+0

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