0

如果已经回答,请原谅我。我遇到的所有答案都使用相同的键对字典数组进行地址排序。不是这种情况。使用 UITableView(分组)的 UIView 具有 tblData 和部分。tblData 从对象数组中获取其数据。我可以使用比较器对数组进行排序,但无论我尝试了什么,都不会反映更改。这是创建数据的方法:

   if (myAppointment!=nil){
        if (myAppointment.OBSERVATIONS!=nil){
            [self.tblData removeAllObjects];
            @synchronized(self.myAppointment){
                for (Observations *tmpObs in [self.myAppointment OBSERVATIONS]){
                    NSMutableString *tmpHdr = [[NSMutableString alloc] initWithString:@"Observation made on: "];
                    [tmpHdr appendString:tmpObs.TIME];
                    [self.tblData setObject:[[NSArray alloc] initWithObjects:tmpObs.TYPE, tmpObs.NOTE, nil] forKey:tmpHdr];
                }
            }
        }
        self.sections = [[self.tblData allKeys] sortedArrayUsingSelector:@selector(compare:)];
    }
    [self.GroupTblView reloadData];

当我尝试对 myAppointment.OBSERVATIONS 进行排序时,我可以验证它们是否已排序。然而,当我尝试重新加载希望已排序的数据时,没有发生任何变化:

        [self.tblData removeAllObjects];
        [self.myAppointment.OBSERVATIONS sortUsingSelector:@selector(compareByType:)];                
        for (Observations *tmpObs in self.myAppointment.OBSERVATIONS){   
            NSMutableString *tmpHdr = [[NSMutableString alloc] initWithString:@"Observation made on: "];
            [tmpHdr appendString:tmpObs.TIME];
            [self.tblData setObject:[[NSArray alloc] initWithObjects:tmpObs.TYPE, tmpObs.NOTE, nil] forKey:tmpHdr];
        }
        self.sections = [[NSArray alloc] initWithArray:[self.tblData allKeys]];
        [self.GroupTblView reloadData];

据我了解,部分没有被排序,或者没有被更新。从上面可以看出,字典键随每个“观察”而变化,因此使用 NSSortDescriptor 进行排序并不像通常那样简单。有没有办法解决这个问题,比如说,使用 block + sortedArrayUsingComparator ?

编辑:

@property (strong, nonatomic) IBOutlet UITableView *GroupTblView;
@property (nonatomic, strong) NSMutableDictionary *tblData;
@property (nonatomic, strong) NSArray *sections;

它们都是在 initWithNib 方法中合成和分配的。

4

1 回答 1

0

这个例子有点傻,我把我的问题归咎于长时间的工作。如果有人有兴趣在分组模式下对 UITableView 使用的 tableData 进行排序,我是这样做的:

        self.sections = [[self.tblData allKeys] 
                         sortedArrayUsingComparator: ^(id a, id b){
                                        // a is a section (a key from the Dictionary), b is another section (another key)
                                        NSArray *a_arr = [self.tblData objectForKey:a];
                                        NSArray *b_arr = [self.tblData objectForKey:b];
                                        // We know that the first item in the array is always the type
                                        return [[a_arr objectAtIndex:0] compare:[b_arr objectAtIndex:0]];
                                        }];
        [self.GroupTblView reloadData];

请记住,objectAtIndex:0 是我的observation.TYPE(见上面的代码)。因此,如果您知道字典对象中数组中排序键的索引,则可以访问它,找到它(使用块)并将其用于排序。

于 2012-09-23T13:31:40.380 回答