如果已经回答,请原谅我。我遇到的所有答案都使用相同的键对字典数组进行地址排序。不是这种情况。使用 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 方法中合成和分配的。