如何对基于视图的tableview进行排序

时间:2013-03-02 17:25:19

标签: ios sorting core-data nstableview nsarraycontroller

我无法对基于视图的tableview进行排序。我使用一个控制核心数据实体的arrayController。

我尝试选择一个列,在属性检查器中我用作排序键,相对于该列的属性名称并比较:作为选择器......当我构建并运行时,单击标题然后显示更改每次单击的箭头,但行没有任何反应。没有排序。

我该如何解决? 我想我错过了一些简单的东西,但我无法克服它。

1 个答案:

答案 0 :(得分:1)

您可能需要考虑使用NSFetchedResultsController。来自NSFetchedResultsController的Apple文档,

  

使用获取的结果控制器有效地管理从Core Data获取请求返回的结果,以便为UITableView对象提供数据。

代码如下所示,提供排序描述符的行以NSSortDescriptor开头。

- (NSFetchedResultsController *)fetchedResultsController
{
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"YourEntityName"
                                              inManagedObjectContext:yourManagedObjectContext];
    [fetchRequest setEntity:entity];

    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"YourSortKey"
                                                                   ascending:YES];

    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
    [fetchRequest setSortDescriptors:sortDescriptors];

    NSError *error = nil;
    NSArray *fetchedObjects = [yourManagedObjectContext executeFetchRequest:fetchRequest 
                                                                      error:&error];
    if (fetchedObjects == nil) {
        // Handle the error
    }

    yourFetchedResultsController = [[NSFetchedResultsController alloc] 
            initWithFetchRequest:fetchRequest 
            managedObjectContext:self.managedObjectContext
              sectionNameKeyPath:nil
                       cacheName:nil];

    return yourFetchedResultsController;
}