Перезагрузка TableView на iPhone из другого класса - PullRequest
2 голосов
/ 30 ноября 2010

Итак, у меня есть FirstViewController, который является UITableViewController, а также делегат и источник данных.Имеет табличное представление.

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

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

Спасибо!

Ответы [ 3 ]

17 голосов
/ 30 ноября 2010

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

Зарегистрировать его легко:

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

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

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

И важно прекратить наблюдения в вашей ViewDidUnload:

[[NSNotificationCenter defaultCenter] removeObserver:self];

Затем в парсере вам нужно просто добавить это, когда он завершится:

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

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

3 голосов
/ 30 ноября 2010

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

Создание объекта для вашего FirstViewController в appDelegate, назначение свойства и его синтез.

В ViewDidLoad FirstViewController,

firstViewControllerObj = self;

В feedParser.m, после разбора кода выполните следующее:

[appDelegate.firstViewControllerObj.tabelView reloadData];
1 голос
/ 30 ноября 2010

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

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