2013-04-06 2 views
2

У меня есть начальный контроллер tableview, который выполняет проверку доступности. Это работает без проблем в пределах viewDidLoad, однако Я хотел бы знать правильный путь к Повтор подключение до его передачи. Соответствующий код в моем файле реализации ниже, я попытался вставить [self ViewDidLoad], если соединение не работает, но это просто устанавливает приложение в цикл (возвращает сообщение об ошибке NSLog) и не показывает UIAlertView.Как я могу повторить тест по достижимости до тех пор, пока он не сработает

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    if(![self connected]) 
    { 
     // not connected 
     NSLog(@"The internet is down"); 
     UIAlertView *connectionError = [[UIAlertView alloc] initWithTitle:@"Connection  Error" message:@"There is no Internet Connection" delegate:self cancelButtonTitle:@"Retry" otherButtonTitles:nil, nil]; 
     [connectionError show]; 
     [self viewDidLoad]; 
    } else 
    { 
     NSLog(@"Internet connection established"); 
     UIButton *btn = [UIButton buttonWithType:UIButtonTypeInfoDark]; 
     [btn addTarget:self action:@selector(infoButtonClicked:) forControlEvents:UIControlEventTouchUpInside]; 
     self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:btn]; 
     [self start]; 
    } 
} 

ответ

3

Как вы должны использовать Reachability?

  • Всегда старайтесь подключиться первым.
  • Если запрос не удался, Reachability расскажет вам, почему.
  • Если сеть появится, Reachability уведомит вас. Затем повторите попытку подключения.

Для получения уведомления, регистрация уведомления и начать класс достижимости от Apple:

@implementation AppDelegate { 
    Reachability *_reachability; 
} 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    [[NSNotificationCenter defaultCenter] 
    addObserver: self 
    selector: @selector(reachabilityChanged:) 
    name: kReachabilityChangedNotification 
    object: nil]; 

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

    // ... 
} 

@end 

Для ответа на уведомление:

- (void) reachabilityChanged: (NSNotification *)notification { 
    Reachability *reach = [notification object]; 
    if([reach isKindOfClass: [Reachability class]]) { 
    } 
    NetworkStatus status = [reach currentReachabilityStatus]; 
    NSLog(@"change to %d", status); // 0=no network, 1=wifi, 2=wan 
} 

Если вы предпочитаете использовать блоки вместо , используйте KSReachability.

+0

Примечание: это код не ARC. Вы можете отметить, что файл не является ARC, добавив флагов компилятора -fno-objc-arc в разделе «Сборка фаз»> «Компиляция источников» вашей цели. – Jano

+0

Привет, спасибо за ответ, рискуя быть очень толстым, где идет первый блок кода (в viewDidLoad?) – user2033055

+0

Да, если вы хотите его для одного контроллера представления или в делете приложения (см. Обновленный ответ), если вы хотите его для всего приложения. Не стесняйтесь спрашивать, все это выглядело чуждо мне, когда я начал с Objective-C. – Jano

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