加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

xcode – 如何重复可达性测试直到它工作

发布时间:2020-12-15 01:48:25 所属栏目:百科 来源:网络整理
导读:我有一个初始tableviewcontroller正在执行可达性检查.这在viewDidLoad中没有问题,但是我想知道重试连接的正确方法,直到它通过.我的实现文件中的相关代码如下所示,如果连接断开,我尝试插入[self ViewDidLoad],但这只是将应用程序设置为循环(返回连接失败NSLog
我有一个初始tableviewcontroller正在执行可达性检查.这在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];
    }
}

解决方法

你应该如何使用 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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读