Перезагрузить стол в модельном классе - PullRequest
1 голос
/ 05 сентября 2011

У меня есть один класс просмотра. В этом классе у меня есть табличное представление. В моем модельном классе я делаю Asynchrous ASIHTTPRequest. И я хочу, чтобы при успешной операции перезагрузить данные в табличном представлении. Какой хороший способ сделать это. Я считаю добавить одно свойство UITableView к классу модели и использовать перезагрузить его. Это хороший подход?

Ответы [ 4 ]

2 голосов
/ 05 сентября 2011

Я думаю, что ваша модель должна сообщить контроллеру, что он обновился (или наоборот, используя KVO).Контроллер должен затем отобразить представление для перезагрузки.

2 голосов
/ 05 сентября 2011

Сделайте вашу модель отправлять уведомление на NSNotificationCenter и ваш табличный просмотр регистрируется для этого уведомления и reloadData, когда оно получает одно.

Внутри вашей модели, когда происходят изменения:

[[NSNotificationCenter defaultCenter] postNotificationName:@"uniqueNotificationName"
                                                    object:self];

Внутри вашего контроллера табличного представления зарегистрируйтесь для уведомления, например, в viewDidAppear:

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(methodToCall:)
                                             name:@"uniqueNotificationName"
                                           object:nil];

И реализовать метод ToCall:

- (void)methodToCall:(NSNotification *)notification {
    [self.tableView reloadData];
}

Когда вы закончите с табличным представлением, например, в viewWillDisappear: вам нужно отменить регистрацию для уведомлений:

[[NSNotificationCenter defaultCenter] removeObserver:self];
1 голос
/ 06 сентября 2011

используйте synchrous и gcd для загрузки данных. при получении данных вызов [самостоятельная перезагрузка] в основной очереди

1 голос
/ 05 сентября 2011

Если вы хотите перезагрузить табличное представление, вы можете использовать один из следующих подходов:

  1. Если вы хотите перезагрузить все отображаемые ячейки , тогда вы можете просто позвонить [tableView reloadData];.Обратите внимание, что только отображаемые ячейки будут перезагружены.Так, если у вас есть, например, 10000 ячеек, и отображаются только 10 из них, то только для 10 ячеек будет вызвано метод cellForRowAtIndexPath:.

  2. ЕслиВы хотите перезагрузить определенные ячейки, тогда вы должны вызвать следующий метод UITableView: - (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation и предоставить в первом операнде список ячеек для перезагрузки.

  3. Если вы хотите перезагрузить весь раздел(или количество секций) UITableView, тогда вам нужно позвонить - (void)reloadSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation и предоставить в первом операнде список секций для перезагрузки.

Надеюсь, это поможет вам выбрать подходящий вариант.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...