2013-07-30 10 views
0

У меня есть приложение, которое ничего не может загрузить, если оно не имеет доступа к Интернету. В моем приложении делегат я использую этот код:UIAlertView, когда у приложения нет интернета

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 

    //Check for internet 
    internetReachableFoo = [Reachability reachabilityWithHostname:@"www.google.com"]; 

    // Internet is not reachable 
    internetReachableFoo.unreachableBlock = ^(Reachability*reach) 
    { 
     // Update the UI on the main thread 
     UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"Alert" message:@"This is an example alert!" delegate:self cancelButtonTitle:@"Hide" otherButtonTitles:nil]; 
     alert.alertViewStyle = UIAlertViewStylePlainTextInput; 
     [alert show]; 
     exit(0); 
     dispatch_async(dispatch_get_main_queue(), ^{ 
      NSLog(@"Someone broke the internet :("); 

     }); 
    }; 
    [internetReachableFoo startNotifier]; 
    return YES; 
} 

Проверка в Интернете делается из этого ответа Link и тогда я хочу, чтобы показать окно предупреждения, которая сообщает пользователю, что не будет работать без интернета, а затем закрыть приложение , В настоящее время у меня есть exit(0);, который я знаю, что яблоко не примет поэтому в моем предупреждении. Мне нужна кнопка ok, чтобы закрыть приложение (если это позволяет яблоко). Моя проблема заключается в том, что я не уверен, как закрыть приложение, особенно с представлением UIAlert (я довольно новичок в iOS), и если это так, чтобы показать представление предупреждения, я хочу, чтобы приложение перестало загружать все остальное, когда вид предупреждения если он не имеет интернет, потому что приложение будет просто терпеть крах в любом случае (снова, если яблоко позволит вам остановить приложение от продолжения загрузки). Как я могу это сделать одобренным Apple?

+1

С точки зрения использования пользователей, что вы пытаетесь сделать, я плохая идея. Сообщите пользователю, что нет Интернета и отключите функции приложения, но не закрывайте приложение. – JeffRegan

+0

Я согласен с обоими ответами (SK9 и Michael Dautermann). Проверьте доступность где-нибудь, кроме делегата приложения (возможно, контроллер корневого представления) и не закрывайте приложение. Просто сообщите пользователю, что им нужно подключиться к Интернету, и не делайте никаких сетевых вызовов до тех пор, пока изменения Reachability не будут подключены. – JeffRegan

+0

ОК получил. Спасибо! Ill просто переместите его, чтобы не выполнять какие-либо функции, пока он не подключен, и не закрывайте приложение. –

ответ

1

Не закрывайте приложение. Apple, безусловно, отвергнет это.

Также, как правило, лучше всего пытаться выполнить запрос все равно и обрабатывать неудачу изящно. Интернет-сигналы могут быть прерывистыми, и один из них не должен разрушать его для всех.

6

Несколько вещей здесь.

1) вы должны проверять на доступность где-то других, чем «didFinishLaunchingWithOptions», может быть, где-то еще, как сказать ... ваш первый контроллер?

Если «didFinishLaunchingWithOptions» занимает слишком много времени, чтобы вернуть, iOS assumes (прочитайте для кода исключения: 0x8badf00d), что ваше приложение мертво и убивает его.

2) Если вы поместили свой код возвращаемости в первый контроллер просмотра, , то - это то, где вы можете легко открыть свой UIAlertView.

Например, добавьте переменную экземпляра «UIAlertView» (или ivar) в контроллер вашего вида.

Если значение равно null, продолжайте делать то, что делает вид. Если он существует (т. Е. Если интернет выключен и отображается предупреждение), приостановите все остальное в контроллере представления до тех пор, пока пользователь не выйдет сам по себе.

Или ... перезагрузите вещи, когда пользователь вернет приложение на передний план и сразу отпустит предупреждение, посмотрев, вернулся ли интернет.

Смежные вопросы