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 を使用してソートするのは簡単ではありません。ブロック + 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 は MY のobservation.TYPE であることに注意してください (上記のコードを参照)。したがって、辞書オブジェクト内の配列内の並べ替えキーのインデックスがわかっている場合は、それにアクセスして (ブロックを使用して) 検索し、並べ替えに使用できます。

于 2012-09-23T13:31:40.380 に答える