これが答えられていれば、私を許してください。私が遭遇したすべての回答は、同じキーを使用して辞書の配列をソートすることに対処しています。これはそうではありません。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 を使用してソートするのは簡単ではありません。ブロック + sortedArrayUsingComparator を使用して、これを回避する方法はありますか?
編集:
@property (strong, nonatomic) IBOutlet UITableView *GroupTblView;
@property (nonatomic, strong) NSMutableDictionary *tblData;
@property (nonatomic, strong) NSArray *sections;
それらはすべて initWithNib メソッドで合成され、割り当てられます。