iPhone: индикация завершения загрузки ABPeoplePickerNavigationViewController

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

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

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

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

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

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


person NRaf    schedule 18.03.2011    source источник


Ответы (1)


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

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

person AechoLiu    schedule 18.03.2011
comment
Спасибо, но это не совсем ответ на мой вопрос. ABPPNC загрузит все контакты, хранящиеся на телефоне. Мне нужен способ узнать, когда эти контакты были загружены. - person NRaf; 18.03.2011