現在、アプリのNSUserDefaultsからロードし、データをUITableViewにフィードするNSMutableArrayがあります。NSMutableArrayは、それぞれ5つまたは6つのキーで構成されるNSDictionaryで構成されます。
次に、UITableViewがあるビューに、UISegmentedControlがあり、ユーザーは、日付などに基づいてUITableViewを並べ替えることができます。
したがって、日付セグメントをクリックすると、次のコードが実行されます。
NSSortDescriptor *descriptor = [NSSortDescriptor sortDescriptorWithKey:@"Date" ascending:NO];
[self.cellArray sortUsingDescriptors:[NSArray arrayWithObject:descriptor]];
ソート自体は、self.cellArrayがNSLogsを介してソートされているのを見ることができるように機能します。テーブルビューを呼び出してreloadDataを実行すると、テーブルビュー自体で実際に再ソートされるNSDictionaryはありません。したがって、プログラムでそれらはソートされていますが、UIでは非常に奇妙です。
上記のコードの直後のステートメントにこれを使用する場合:
for (NSDictionary *dict in self.cellArray) {
NSLog(@"DateKey: %@", [dict objectForKey:@"Date"]);
}
これは、昇順を実行した場合のNSLogの外観です:YES:
2012-05-20 13:48:21.008 App[71308:707] DateKey: 2012-05-13 18:19:22 +0000
2012-05-20 13:48:21.009 App[71308:707] DateKey: 2012-05-13 18:19:29 +0000
2012-05-20 13:48:21.009 App[71308:707] DateKey: 2012-05-15 01:54:13 +0000
2012-05-20 13:48:21.010 App[71308:707] DateKey: 2012-05-15 04:01:15 +0000
2012-05-20 13:48:21.011 App[71308:707] DateKey: 2012-05-16 04:08:20 +0000
2012-05-20 13:48:21.012 App[71308:707] DateKey: 2012-05-16 04:13:59 +0000
2012-05-20 13:48:21.012 App[71308:707] DateKey: 2012-05-16 04:32:29 +0000
2012-05-20 13:48:21.013 App[71308:707] DateKey: 2012-05-16 04:32:38 +0000
私が昇順を行う場合:いいえ、これは私のNSLogがどのように見えるかです:
2012-05-20 13:56:25.956 App[71468:707] DateKey: 2012-05-16 04:32:38 +0000
2012-05-20 13:56:25.960 App[71468:707] DateKey: 2012-05-16 04:32:29 +0000
2012-05-20 13:56:25.961 App[71468:707] DateKey: 2012-05-16 04:13:59 +0000
2012-05-20 13:56:25.961 App[71468:707] DateKey: 2012-05-16 04:08:20 +0000
2012-05-20 13:56:25.962 App[71468:707] DateKey: 2012-05-15 04:01:15 +0000
2012-05-20 13:56:25.962 App[71468:707] DateKey: 2012-05-15 01:54:13 +0000
2012-05-20 13:56:25.963 App[71468:707] DateKey: 2012-05-13 18:19:29 +0000
2012-05-20 13:56:25.964 App[71468:707] DateKey: 2012-05-13 18:19:22 +0000
ご覧のとおり、並べ替えは実際に正しく機能しますが、そのコードの後にreloadDataを実行すると、UITableViewはDateキーに基づいてセルを並べ替えません。
私のテーブルビューは実際にはIBで接続されており、nilではありません。それが重要な場合、私はそれのためのセッターとゲッターを持っています。
なぜこれが起こっているのか誰かが知っていますか?または、より多くのコンテキスト/コードが必要ですか?
ありがとう!