ios - reloadData 不适用于 UITableView 数据源?

标签 ios uitableview sorting nsdictionary

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

然后在 UITableView 所在的 View 中,我有一个 UISegmentedControl,用户可以在其中根据日期或其他一些内容对 UITableView 进行排序。

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

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

排序本身有效,因为我可以看到 self.cellArray 通过 NSLogs 进行排序。尽管当我调用 tableview 来 reloadData 时,没有任何 NSDictionary 实际上在 tableview 本身中重新排序。因此,以编程方式对它们进行排序,但不在 UI 中进行排序,这非常奇怪。

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

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 键对单元格重新排序。

我的tableview实际上是在IB中连接的并且不为零。如果重要的话,我确实有一个 setter 和 getter。

有人知道为什么会发生这种情况吗?或者您需要更多上下文/代码吗?

谢谢!

最佳答案

我倾向于将您的日志记录放在...

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

在您调用 sortUsingDescriptors 以及 cellForRowAtIndexPath 方法之后。我还会在 cellArray 初始化的地方放置一个 NSLog 语句(以确保您不会意外地再次调用该语句……如果您的例程变得复杂,则很容易做到)。

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

只需开始在各种例程中放置断点和/或调试消息即可。它必须是简单的事情。我刚刚在重新加载时进行了重新加载测试,并且排序顺序被保留。所以它必须是简单的事情。

关于ios - reloadData 不适用于 UITableView 数据源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10675792/

相关文章:

ios - 在tableView中点击不同的行后在collectionView中显示不同的数组

IOS swift 4展开和折叠tableview不工作并导致崩溃

javascript - 在 Javascript 中对具有特定异常的对象数组进行排序

ios - 我的 IOS 应用程序的大小

ios - InAppBrowser 注入(inject)脚本(使用 executeScript)

ios - 如何在 alertview 上找到索引路径?

Powershell 排序命令未按预期工作

javascript - 使用 Knockout .sort() 对 JSON 数据进行排序

ios - 在我的 iOS 应用程序中集成 Google Analytics SDK (GoogleAnalyticsiOS_2.0beta4) 时出错

ios - 显示前加载ViewController的WebView