Проблема в том, что когда я пытаюсь удалить все записи в моем объекте источника данных и таким образом очистить все строки в моем табличном представлении, у меня получается с первой частью, счетчиком отображаемых строк (tableView:numberOfRowsInSection:
метод) возвращает 0
, но ячейки по-прежнему содержат устаревшие данные.
(имеют небольшую репутацию здесь, чтобы публиковать изображения, поэтому я загрузил его в ftp: history.png )
Вот пример того, что я пытаюсь сделать.Значок мусорного ведра очищает базу данных, устанавливает количество строк в ноль, но эти ячейки остаются в таблице, что вызывает сбои при прокрутке.
Объект источника данных хранится как свойство в AppDelegate, поэтому ViewController получает оттуда данные.
Вот некоторый код:
HistoryViewController.h
@interface HistoryViewController : UITableViewController <UITableViewDataSource> {
IBOutlet UITableView *historyTable;
SynonymsAppDelegate *appDelegate;
}
@property (retain) UITableView *historyTable;
- (IBAction)clearHistory:(id) sender;
@end
HistoryViewController.m
@implementation HistoryViewController
@synthesize historyTable;
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
appDelegate = (SynonymsAppDelegate *)[[UIApplication sharedApplication] delegate];
[appDelegate initHistoryList];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [appDelegate.historyList count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
HistoryModel *historyEntry = [appDelegate.historyList objectAtIndex:indexPath.row];
cell.textLabel.text = historyEntry.word;
return cell;
}
- (IBAction)clearHistory:(id)sender {
[HistoryDataController clearHistory]; // removes entries from DB
[appDelegate initHistoryList]; // refreshes data source object
[self.tableView reloadData]; // doesn't help
}
AppDelegate имеет свойство (NSMutableArray) *historyList
и эту функцию:
- (void)initHistoryList {
HistoryDataController *historyDataController = [[HistoryDataController alloc] initWithHistoryData];
historyList = [historyDataController.historyEntries retain];
[historyDataController release];
}
Я считаю, что проблема в том, что TableView каким-то образом кэширует значения своих ячеек, но почему они отображаются, когда t ableView:numberOfRowsInSection:
возвращает 0
?А как очистить этот кеш?
Спасибо за помощь.