0

現在、アプリの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ではありません。それが重要な場合、私はそれのためのセッターとゲッターを持っています。

なぜこれが起こっているのか誰かが知っていますか?または、より多くのコンテキスト/コードが必要ですか?

ありがとう!

4

1 に答える 1

1

私はあなたのロギングステートメントを入れたいと思います...

for (NSDictionary *dict in self.cellArray)
    NSLog(@"DateKey: %@", [dict objectForKey:@"Date"]);

sortUsingDescriptorsで、メソッドで同様に呼び出した直後cellForRowAtIndexPath。また、cellArrayが初期化される場所にNSLogステートメントを配置します(誤って再度呼び出さないようにするために...ルーチンが複雑になった場合に簡単に実行できます)。

注文はcellForRowAtIndexPath、並べ替え直後の注文を反映していないと思います。これが事実であると仮定すると、cellArrayがどこかでリセットされているか(つまり、viewDidLoadまたは他の場所でどこにデータを入力しますか?)、またはsortUsingDescriptorsが思ったように呼び出されていません。

さまざまなルーチンにブレークポイントやデバッグメッセージを入れ始めるだけです。シンプルなものでなければなりません。リロード時にリロードのテストを行ったところ、ソート順は保持されています。だから、それは単純なものでなければなりません。

于 2012-05-20T20:16:42.820 に答える