CodeGrue прав. После нескольких дней размышлений о том, почему [subclassOjb.tableView reloadData] не работал, я бросил пытаться понять это и остановился на двух известных мне методах, которые работают, и их очень легко реализовать: 1- Центр уведомлений (из tableviewcell не следует использовать этот) 2- или используйте суперпредставление, чтобы получить указатель на свойство таблицы (это идеально подходит для uitableviewcells).
Обратите внимание, что использование метода superview будет работать только с вашим классом uitableviewcell. Скорее всего, если у вас есть пользовательская ячейка, у вас будет класс uitableviewcell, суперпредставлением которого является ваш tableviewcontroller или любой другой класс, который вы используете с делегатом uitableview + источником данных.
Теперь, если вам нужно перезагрузить табличное представление из другого класса, класса источника данных, скажем, одиночного или любого другого; вы должны использовать блок в своем классе табличного представления для загрузки данных в другой поток, а внутренний блок - для перезагрузки таблицы в основной потоке.
//handle tablview to show spinner (you have to lower your tableview out of the way yourself if you are calling this method)
[self.tableView setContentOffset:CGPointMake(0, -rf.frame.size.height) animated:YES];
//start spinner animation here
[rf beginRefreshing];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,
(unsigned long)NULL), ^(void) {
// Load Data from data source class here
[myDataSourceClass fetchDataMethod];
dispatch_async(dispatch_get_main_queue(), ^{
//Reload data and stop spinner
[self.tableView reloadData];
[rf endRefreshing];
//handle tablview to hide spinner atrributed title
[self.tableView setContentOffset:CGPointMake(0, 0) animated:YES];
});
});
Если вы находитесь в другом представлении и что-то происходит, вам необходимо перезагрузить таблицу в представлении таблицы. В этот момент ваша таблица не отображается на экране, и нет причины, по которой вам следует перезагрузить таблицу, если ее никто не увидит. Просто добавьте [self.tableview reloadDAta] в ваш метод viewWillAppear, когда пользователи вернутся к вашему представлению tableviewcontroller, он перезагрузит таблицу на лету.
В любом случае для tableviewcell просто используйте следующее в вашем действии для перезагрузки Data (кредит CodeGrue)
UITableView *parentTable = (UITableView *)self.superview;
[parentTable reloadData];
** другая тема, но для тех из вас, кто начинает сейчас. Это избавит вас от возможных головных болей -
после создания вашего табличного класса и прежде чем вы начнете разбираться с его методами делегата - сделайте это: в ваш viewDidLoad добавьте следующий код:
self.tableView.delegate = self;
self.tableView.dataSource = self;