2010-11-30 6 views
2

Итак, у меня есть FirstViewController, который является UITableViewController, а также делегат и dataSource. Он имеет вид таблицы.Перезагрузка TableView на iPhone из другого класса

У меня есть еще один класс FeedParser, который анализирует данные, но после того, как он завершит разбор, мне нужно, чтобы он пошел и обновил UITableView, иначе он ничего не покажет.

Это, наверное, глупый вопрос, так что простите меня, но как мне пойти на вызов tableView.reloadData FirstViewController из FeedParser?

Есть ли способ вернуть этот вид?

Спасибо!

+0

когда же называется классом feedparser? – KingofBliss 2010-11-30 06:00:40

+0

Является ли feedParser отдельным viewController? – KingofBliss 2010-11-30 06:02:05

+0

Класс FeedParser создается и вызывается из AppDelegate при загрузке приложения. – Kevin 2010-11-30 06:04:03

ответ

17

Зарегистрируйте контроллер просмотра для получения уведомлений о том, что данные были изменены, и обновите таблицу при ее получении. Затем попросите парсер отправить его.

Регистрация для него легко:

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

Ваш метод обновления должен быть настроен на получение этих уведомлений по этим линиям:

- (void)reloadTable:(NSNotification *)notif { 
    [self.yourTableName reloadData]; 
} 

И очень важно, чтобы остановить наблюдения в вашей ViewDidUnload :

[[NSNotificationCenter defaultCenter] removeObserver:self]; 

Затем в парсере необходимо просто добавить это, когда оно c omplete:

[[NSNotificationCenter defaultCenter] postNotificationName:@"YourNotificationName" 
                object:nil]; 

Контроллер вида (и любое другое наблюдение уведомления с этим именем) получит сообщение и выполнить свою задачу.

1

Просто разместите ссылку на FirstViewController на своем делете приложения, затем позвоните по номеру [appDelegate.firstViewController.tableView reloadData].

3

Простой метод,

Создание объекта для вашего FirstViewController в AppDelegate, присвоить свойство и синтезировать.

В ViewDidLoad из FirstViewController,

firstViewControllerObj = self; 

В feedParser.m, после синтаксического анализа делается код следующим образом,

[appDelegate.firstViewControllerObj.tabelView reloadData]; 
Смежные вопросы