2012-05-20 53 views
0

目前我有一個NSMutableArray從我的應用中的NSUserDefaults加載並將數據提供給我的UITableView。 NSMutableArray由NSDictionarys組成,每個NSDictionarys由5或6個鍵組成。reloadData不適用於UITableView數據源?

然後在UITableView的視圖中,我有一個UISegmentedControl,然後用戶可以根據Date或其他東西對UITableView進行排序。

所以,當他們點擊日期段,我執行此代碼:

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

自己的作品,因爲我可以看到self.cellArray正在通過NSLogs分類排序。儘管當我將我的tableview調用到reloadData時,沒有一個NSDictionarys實際上在tableview本身中重新排序。所以編程方式他們正在排序,但不是在非常奇怪的用戶界面。

如果使用這種for語句代碼之後我上面貼:

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

這是我的NSLogs樣子,如果我做上升: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 

如果我做上升:不,這是我的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不會根據日期鍵重新排列單元格。

我的tableview實際上是連接在IB中,而不是零。如果這很重要,我確實有一個二傳手和一個吸氣器。

有沒有人知道爲什麼會發生這種情況?或者你需要更多的上下文/代碼?

謝謝!

+0

向我們展示'tableView:cellForRowAtIndexPath:'。即它實際上是從'cellArray'讀取的嗎? – mattjgalloway

+0

我加了我的cellForRowAtIndexPath –

+0

我很困惑。這看起來很好。 'cellForRowAtIndexPath:'在'reloadData'後肯定被調用? – mattjgalloway

回答

1

我傾向於把你的logging語句...

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

,你在你的cellForRowAtIndexPath方法調用sortUsingDescriptors之後也是如此。我還會把一個NSLog語句放在cellArray正在初始化的地方(以確保你不會意外地再次調用這個語句;如果你的例程變得複雜,這很容易做到)。

我必須相信cellForRowAtIndexPath中的訂單不會反映您在排序後立即得到的訂單。假設是這種情況,cellArray會在某個地方重置(即,您在哪裏填充它?在viewDidLoad或其他地方?),或者您的sortUsingDescriptors沒有像您認爲的那樣被調用。

剛開始在各種例程中放置斷點和/或調試消息。這一定很簡單。我只是在重新加載的時候做了一次重新加載的測試,並且正在保存排序順序。所以它必須是簡單的。