5

私のプロジェクトでは、.plistから、より具体的にはNSDictionaryからデータを取得しています。.plistの内容で辞書を初期化します。これはうまく機能します。それから私がするとき

NSArray *array = [dict allKeys];

配列にすべてのキーが入力されますが、.plistファイルにある順序とは異なり、完全にランダムな順序になります。私は本当に順序を維持する必要があります。問題が発生する可能性がある場合、ディクショナリのキーは配列です。何が得られないのですか?

よろしくお願いします!

4

5 に答える 5

7

NSSet 内の項目間に順序がないのと同じように、NSDictionary 内のキーと値のペアに固有の順序はありません。

特定の順序でキーが必要な場合は、次のようなものを使用する必要があります- (NSArray *)keysSortedByValueUsingComparator:(NSComparator)cmptrが、plist ファイルで NSDictionary がシリアル化された順序は得られません。

于 2012-05-01T16:36:02.043 に答える
6

これを取得できる組み込みの方法はありません。しかし、単純なロジックが機能します。辞書を準備するときに、各キーの前にいくつかの数値テキストを追加するだけです。お気に入り

NSDictionary *dict = [[NSDictionary alloc] initWithObjectsAndKeys:
                       @"01.Created",@"cre",
                       @"02.Being Assigned",@"bea",
                       @"03.Rejected",@"rej",
                       @"04.Assigned",@"ass",
                       @"05.Scheduled",@"sch",
                       @"06.En Route",@"inr",
                       @"07.On Job Site",@"ojs",
                       @"08.In Progress",@"inp",
                       @"09.On Hold",@"onh",
                       @"10.Completed",@"com",
                       @"11.Closed",@"clo",
                       @"12.Cancelled", @"can",
                       nil]; 

すべてのキーを配置と同じ順序で取得しながら sortingArrayUsingSelector を使用できる場合。

 NSArray *arr =  [[dict allKeys] sortedArrayUsingSelector:@selector(localizedStandardCompare:)];

UIView でキーを表示したい場所で、先頭の 3 文字を切り取るだけです。

于 2013-02-22T09:10:34.330 に答える
3

Qwerty Bob が言ったように、NSDictionary はその内容を順序付けしません。キーの順序を保持する必要がある場合、キーの配列を .plist ファイルに個別に保存する方法があります。次に、配列を列挙し、それを使用して辞書の値に順番にアクセスします。

于 2012-05-01T16:41:40.433 に答える
2

Dictionary キーを使用して、必要な順序で NSArray を作成できます。

于 2012-06-19T15:38:13.407 に答える
-1

これを試して:

NSArray *array = [dict allKeys];

NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"self" ascending:NO];
NSArray *descriptors = [NSArray arrayWithObject:descriptor];

NSArray *orderedKeys = [array sortedArrayUsingDescriptors:descriptors];
于 2014-12-19T01:33:47.013 に答える