reloadData不适用于UITableView dataSource?

时间:2012-05-20 17:58:10

标签: ios uitableview sorting nsdictionary

目前我有一个NSMutableArray,它从我的应用程序中的NSUserDefaults加载并将数据提供给我的UITableView。 NSMutableArray由NSDictionarys组成,每个NSDictionarys包含5或6个键。

然后在UITableView的视图中,我有一个UISegmentedControl,然后用户可以根据Date或其他东西对UITableView进行排序。

因此,当他们点击日期段时,我会执行以下代码:

NSSortDescriptor *descriptor = [NSSortDescriptor sortDescriptorWithKey:@"Date" ascending:NO];
[self.cellArray sortUsingDescriptors:[NSArray arrayWithObject:descriptor]];

排序本身就像我看到self.cellArray通过NSLogs排序一样。虽然当我将tableview调用reloadData时,NSDictionarys中没有一个实际上在tableview本身中重新排序。因此,以编程方式对它们进行排序,但不是在非常奇怪的UI中。

如果在我上面发布的代码之后立即使用此语句:

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

如果我提升,这就是我的NSLogs:是:

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

如果我提升:不,这就是我的NSLogs的样子:

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中连接的,并不是零。如果重要的话,我确实有一个二传手和吸气剂。

有谁知道为什么会这样?或者您需要更多上下文/代码吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

我倾向于把你的日志声明......

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

in,在您sortUsingDescriptors方法中调用cellForRowAtIndexPath之后。我还将一个NSLog语句放在cellArray初始化的位置(以确保你不会再意外地调用它...如果你的例程变得复杂,那么很容易做到)。

我必须相信cellForRowAtIndexPath中的顺序不会反映您排序后立即获得的顺序。假设是这种情况,cellArray会在某处重置(即你在哪里填充它?在viewDidLoad或其他地方?),或者你的sortUsingDescriptors没有像你想象的那样被调用。

开始在各种例程中添加断点和/或调试消息。它必须是简单的东西。我只是在重新加载时进行了重新加载的测试,并且正在保存排序顺序。所以它必须简单。