Как перезагрузить данные в классе, который реализует протокол UITableViewDataSource
У меня есть класс, который реализует протокол UITableViewDelegate, и есть другой класс, который обрабатывает данные, т.е. он реализует протокол UITableViewDataSource.
@interface TableViewClass : UITableViewController <UITableViewDelegate>
@interface TableDataSource : NSObject <UITableViewDataSource>
и я устанавливаю TableViewClass в качестве делегата и TableDataSource в качестве источника данных
id datasource = [[TableDataSource alloc] init]
[self.tableView setDelegate:self];
[self.tableView setDataSource:dataSource];
Я извлекаю данные из асинхронного вызова сервера в методе init класса TableDataSource, который заполняет массив и определяет количество строк / разделов в таблице.
Но прежде чем вызов вернет некоторый результат, numberOfSectionsInTableView
а также numberOfRowsInSection
выполняются в результате 0 строк и 0 разделов, следовательно, пустая таблица.
Я думал поставить [self.tableView reloadData]
в callBack, но у меня нет доступа к tableView в классе источника данных. Кто-нибудь может подсказать мне, как перезагрузить данные в tableView через класс источника данных, как мне может понадобиться позже, чтобы обновить данные тоже. Спасибо
1 ответ
Чтобы быстро решить эту проблему, вы можете добавить @property в TableDataSource для UITableView.
// TableDataSource.h
@interface TableDataSource : NSObject <UITableViewDataSource>{
UITableView *tableView;
}
@property(retain)UITableView *tableView;
@end
// TableDataSource.m
@implementation TableDataSource
@synthesize tableView;
- (void)dealloc{
self.tableView = nil;
}
@end
Теперь установите свойство при создании источника данных:
// UITableViewController.m
TableDataSource* datasource = [[TableDataSource alloc] init]
[datasource setTableView:self.tableView]
[self.tableView setDelegate:self];
[self.tableView setDataSource:dataSource];
Когда вам нужно перезагрузить данные из источника данных, теперь вы можете сделать:
[self.tableView reloadData];