在UITableview中排序数据的问题
问题描述:
我已经通过核心数据实现了一个具有数据源的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