Где поставить проверку доступности, чтобы убедиться, что данные загружаются перед просмотром? - PullRequest
0 голосов
/ 11 апреля 2011

Я прочитал этот вопрос и нашел его ответ полезным для проверки интернет-соединения для iPhone. Я реализовал проверку в моем сообщении viewDidLoad. Однако мое приложение загружает данные из файла XML с сервера (в пределах viewWillAppear). В этом случае проверка должна быть выполнена до того, как приложение попытается загрузить данные из интернет-источника. Моя проблема здесь в том, что проверка сети занимает несколько секунд, но приложение продолжает работу с кодом.
Это приводит к задержке проверки. Таким образом, имеется действующее интернет-соединение, но переменная bool, в которой хранится эта информация, установлена ​​слишком поздно.

Код в viewDidLoad

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(checkNetworkStatus:) name:kReachabilityChangedNotification object:nil];
internetReachable = [[Reachability reachabilityForInternetConnection] retain];
[internetReachable startNotifier];

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

Код в представленииWillAppear

if(internetActive == TRUE)
{
    NSLog(@"connected");
    //Code to load XML stuff
}
else
{
    NSLog(@"not connected");
}

Консоль показывает мне "не подключен". Но через несколько секунд журналы отладки в "checkNetworkStatus" показывают мне, что интернет-соединение доступно и будет установлен bool "internetActive".
Я предполагаю, что проверка сети доставляет его отчет о состоянии соединения слишком поздно для моей цели. Есть ли способ отложить приложение до тех пор, пока не будет установлено соединение? Или это приведет к сбою приложения, поскольку представление не будет отображаться в течение нескольких секунд? Есть ли другие возможности для обеспечения связи?

Мой второй вопрос: как обеспечить доступность определенного интернет-адреса? Я выше упомянул ссылку

    hostReachable = [[Reachability reachabilityWithHostName: @"www.apple.com"] retain];
    [hostReachable startNotifier];

для обнаружения соединения с хостом, но я хочу подробно рассказать и попытаться определить, заслуживает ли хост определенного адреса или нет. Но ввод полного адреса пути (например, «localaddress.mylan.de/lan/xml/») вместо хоста приводит к недостижимому состоянию соединения для хоста. Ввод указанного адреса в адресную строку браузера показывает мне правильный результат. Я думаю, я должен проверить это иначе, но как?

Спасибо за чтение:)

Ответы [ 2 ]

1 голос
/ 29 августа 2011

После получения большего опыта в разработке IOS мой первый вопрос решается в три этапа:

  1. Первый шаг - запустить все необходимые уведомители один раз.Это можно сделать, запустив их в viewDidLoad первого загруженного ViewController.
  2. Проверьте текущее состояние соединения, оценив свойство с именем currentReachabilityStatus объектов достижимости.Это состояние может быть «не подключено», даже если подключение доступно.Это происходит, если проверка выполняется в ViewController, который запускает уведомитель.Причиной этого является время, которое требуется, пока уведомитель распознает соединение.Если свойство currentReachabilityStatus оценивается как связанное, то могут быть запущены процессы загрузки данных.
  3. Оценка состояния соединения в методе, селектор которого добавляется во время добавления уведомителя.Этот метод запускается каждый раз, когда изменяется состояние соединения.Первый звонок будет сразу после запуска уведомителя.Если состояние соединения оценивается как подключенное, тогда могут быть запущены процессы загрузки данных.

Второй вопрос остается нерешенным до сих пор.Может быть, нет другого способа, кроме отправки запроса к цели и ожидания ответа или тайм-аута.

0 голосов
/ 15 ноября 2012

Вы пробовали dispatch_async & dispatch_sync (dispatch_get_main_queue (перезагрузите данные здесь)?

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