iPhone: индикация завершения загрузки ABPeoplePickerNavigationViewController - PullRequest
0 голосов
/ 18 марта 2011

Я работаю над приложением, которое позволяет пользователям отправлять сообщения людям, которые могут быть выбраны из различных разделов.Один из этих разделов - это контакты, хранящиеся в телефонной книге (другие контакты выбираются из онлайн-базы данных).

Таким образом, у меня есть «основной список» получателей.Если пользователь, например, выберет контакт из своей сетевой учетной записи, это откроет новое представление, которое позволит пользователю выбрать, какие контакты добавить в список получателей.Когда они вернутся в основной список, они должны увидеть выбранных участников, выбранных там.Если они должны вернуться, чтобы добавить другого человека, все выбранные контакты должны быть проверены (каждый контакт отображается как UITableViewCell).

Это работает нормально для всех онлайн-контактов, однако у меня возникла проблема с реализациейэта функция для локальных контактов, использующих ABPeoplePickerNavigationViewController.Чтобы проверить выбранные контакты, когда пользователь вернется к этому экрану, мне нужно иметь какой-то способ сейчас, когда представление загружено.

Гарантируется ли вызов любого из делегатов представления (т.е. ViewDidAppear) после таблицыбыл загружен (я очень сомневаюсь в этом)?

Если нет, я думал о подсчете общего количества строк в источнике данных (используя numberOfRowsInSection :) в таймере.Если полсекунды или около того прошло без увеличения счетчика, следует с уверенностью заявить, что все записи были загружены.Однако почему-то я не уверен, что это сработает.Может случиться так, что все записи будут загружены за один раз.

Есть идеи, как этого добиться?Мои предложенные методы работоспособны?Есть ли другое решение?

1 Ответ

0 голосов
/ 18 марта 2011

Если вы выполняете переход представления стандартными методами, такими как presentModelView: или pushViewController:, то будут вызваны методы about viewWillAppear :, viewDidAppear, viewWillDisappear: и viewDidDisappear.Но если вы сделаете переход представления методами экземпляра UIView, такими как + transitionFromView: toView: duration: options: завершение и т. Д., То вам придется вызывать эти методы viewWillAppears вручную.

Все связанные с интерфейсом методы будут выполняться в основном потоке,и ABPeoplePickerNavigationController является подклассом UIViewController.Когда его представление загружено, оно вызывает -viewDidLoad.В данный момент это означает, что представление было загружено, возможно, это представление не появляется.Таким образом, -viewWillAppear: должно выполняться после -viewDidLoad.Но, -viewDidLoad может быть выполнен до возвращения из -init на практике.В моем эксперименте я установил backgroundColor представления внутри -init, затем, когда я использую self.view.backgroundColor = [UIColor black], в этот момент представление было загружено.Это означает, что -viewDidLoad будет выполняться, когда я установлю цвет фона представления.

...