1

我不知道如何按字母顺序对 UITableView 中的数据进行排序。

我一直在 Icodeblog(网站)中使用 ToDoList 示例。一旦我输入数据,它就会出现在 UITableview 上。数据位于 sqlite 文件中。

我在 UITableview 栏中创建了一个按钮来运行此代码以按字母顺序对文本进行排序......但它不起作用:

    NSMutableArray *array = [NSMutableArray array];
    NSArray *sortedArray;
    NSSortDescriptor *lastDescriptor =
    [[NSSortDescriptor alloc] initWithKey:newTodo.text
                                ascending:YES
                                 selector:@selector(localizedCaseInsensitiveCompare:)];
    NSArray *descriptors = [NSArray arrayWithObjects:lastDescriptor, nil];
sortedArray = [array sortedArrayUsingDescriptors:descriptors];
    [self.tableView reloadData];

请指出正确的方向。我的朋友还告诉我检查“sortUsingSelector”方法......但我仍然无法弄清楚。

我正在使用的示例代码位于此处

4

3 回答 3

1

刚刚测试了示例代码,这就是我对它所做的。NSSortDescriptor将使用 KVC,因此 initWithKey将是对象的相应属性。您的代码目前没有做任何事情,您正在尝试对一个空数组进行排序。此外,您不会修改表视图数据源。

- (void)viewWillAppear:(BOOL)animated 
{
    todoAppDelegate *appDelegate = (todoAppDelegate *)[[UIApplication sharedApplication] delegate];
    NSSortDescriptor *lastDescriptor =
    [[NSSortDescriptor alloc] initWithKey:@"text"
                                ascending:YES
                                 selector:@selector(localizedCaseInsensitiveCompare:)];
    NSArray *descriptors = [NSArray arrayWithObjects:lastDescriptor, nil];
    NSMutableArray* sortedArray = [[[appDelegate.todos sortedArrayUsingDescriptors:descriptors] mutableCopy] autorelease];
    appDelegate.todos = sortedArray;

    [self.tableView reloadData];
    [super viewWillAppear:animated];
}
于 2012-06-13T01:13:35.580 回答
0

看一眼 :

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Collections/Articles/Arrays.html#//apple_ref/doc/uid/20000132-SW5

sortedArray = [anArray sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];

在这个问题中:

如何按字母顺序对 NSArray 进行排序?

localizedCaseInsensitiveCompareNSString类的一个方法

于 2012-06-12T22:11:36.103 回答
0

您可以与这些人在这里提出的答案相处融洽,但为了简单起见,我将在查询的帮助下进行排序,例如:

 "SELECT * FROM <table-name> ORDER BY <column-name>"

我猜这可能是一种更简单的方法。

于 2012-06-13T12:59:57.067 回答