0

我有一个存储在核心数据中的托管对象列表。我使用这些对象来填充按字母顺序划分的 tableview 控制器。这些对象中的数据是通过 Web 服务获取的,因此我无法控制它们的情况(在这种情况下实际上并没有太大区别)。

大多数数据都以大写形式返回。我注意到,在极少数情况下,案例并非全部大写,这些项目不会按字母顺序排列。在以下代码示例中,stationIndex 是已排序的首字母数组:

for(NSString *character in stationIndex){

    NSPredicate *pred = [NSPredicate predicateWithFormat:@"name beginswith[c] %@", character];
    // sort the list
    NSArray *filteredGaugeList = [[tempGaugeList filteredArrayUsingPredicate:pred] sortedArrayUsingComparator:^NSComparisonResult(id a, id b) {
        NSString *first = [(Gauge*)a name];
        NSString *second = [(Gauge*)b name];
        return [first compare:second];
    }];
    if([filteredGaugeList count] > 0){
        [[self allGauges] addObject:filteredGaugeList];
    }
}

我知道在使用选择器时有一种方法可以忽略大小写,但就我而言,我正在对对象的属性进行排序,所以我假设我需要一个比较器。在这种情况下有没有办法处理案件?谢谢!

4

1 回答 1

2

您也可以在比较器中对忽略大小写进行排序,只需使用

return [first caseInsensitiveCompare:second];

或者,使用指定选择器排序键的排序描述符:

NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"name"
                           ascending:YES
                            selector:@selector(caseInsensitiveCompare:)];
NSArray *sorted = [array sortedArrayUsingDescriptors:@[sort]];

备注:要在表格视图中显示 Core Data 对象,您还可以使用 NSFetchedResultsController. 然后,您将谓词和排序描述符添加到获取请求中。获取的结果控制器还具有将表格视图分组为部分的方法,并在插入/删除/修改对象时自动更新表格视图。

于 2013-11-07T20:47:39.470 回答