• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - 可达性不起作用

[复制链接]
菜鸟教程小白 发表于 2022-12-13 07:25:48 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我目前正在编写一个需要互联网连接(TCP 到服务器)的游戏。我正在尝试使用 Apple 的 Reachability 类,但它不起作用。我是 NotificationCenter 和 Reachability 的新手,所以如果这是一个愚蠢的问题,请原谅。

LoginViewController.h 中与可达性相关的 Prop

@property (nonatomic) Reachability *hostReachability;
@property (nonatomic) Reachability *internetReachability;
@property (nonatomic) Reachability *wifiReachability;
@property BOOL internetActive;
@property BOOL hostActive;

在 LoginViewController.m 中

//Reachability
    [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(handleNetworkChange name: kReachabilityChangedNotification object: nil];

    NSString* hostIP = @"<my server IP is here, removed for obvious reasons>";

    hostReachability = [Reachability reachabilityWithHostname:hostIP];

    [hostReachability startNotifier];

    NetworkStatus hostStatus = [internetReachability currentReachabilityStatus];

    if(hostStatus == NotReachable) {NSLog(@"no");}
    else if (hostStatus == ReachableViaWiFi) {NSLog(@"wifi"); }
    else if (hostStatus == ReachableViaWWAN) {NSLog(@"cell"); }

    hostReachability = [Reachability reachabilityForInternetConnection];

    [internetReachability startNotifier];

    NetworkStatus internetStatus = [internetReachability currentReachabilityStatus];

    if(internetStatus == NotReachable) {NSLog(@"no");}
    else if (internetStatus == ReachableViaWiFi) {NSLog(@"wifi"); }
    else if (internetStatus == ReachableViaWWAN) {NSLog(@"cell"); }

handleNetworkChange:过程

- (void)handleNetworkChangeNSNotification*)notification{
    NetworkStatus internetStatus = [internetReachability currentReachabilityStatus];

    switch (internetStatus) {
        case NotReachable:
        {
            NSLog(@"No internet connection");
            self.internetActive = NO;
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle"No internet connection"
                                                            message"Could not connect to the internet. Please try again later."
                                                           delegate:nil
                                                  cancelButtonTitle"OK"
                                                  otherButtonTitles:nil];
            [alert show];
        }
        break;
        case ReachableViaWiFi:
        {
            NSLog(@"The internet is working via WIFI.IN AGENDA");
            self.internetActive = YES;

            break;
        }
        case ReachableViaWWAN:
        {
            NSLog(@"The internet is working via WWAN.IN AGENDA");
            self.internetActive = YES;

            break;
        }

        default:
        break;
    }

    NetworkStatus hostStatus = [hostReachability currentReachabilityStatus];
    switch (hostStatus)
    {
        case NotReachable:
        {
            NSLog(@"A gateway to the host server is down.IN AGENDA");
            self.hostActive = NO;
            NSLog(@"No internet connection");
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle"No connection to host"
                                                            message"Could not connect to the host server. Please try again later."
                                                           delegate:nil
                                                  cancelButtonTitle"OK"
                                                  otherButtonTitles:nil];
            [alert show];

            break;
        }
        case ReachableViaWiFi:
        {
            NSLog(@"A gateway to the host server is working via WIFI.IN AGENDA");
            self.hostActive = YES;

            break;
        }
        case ReachableViaWWAN:
        {
            NSLog(@"A gateway to the host server is working via WWAN.IN AGENDA");
            self.hostActive = YES;

            break;
        }
    }

运行应用程序时,无论我是否实际连接到互联网,以及服务器软件是否正在运行,我总是在终端中收到“no no”。

提前致谢。



Best Answer-推荐答案


这里的主要问题是您的代码中的拼写错误; LoginViewController.m 中的 hostReachability = [ReachabilityreachabilityForInternetConnection]; 应该是 internetReachability = [ReachabilityreachabilityForInternetConnection];。目前的方式是,您永远不会实例化 internetReachability,然后我猜 [internetReachability currentReachabilityStatus] 将始终返回 nil

以下是您可以使用的基本示例:

@interface LoginViewController ()

// ...

@property (strong, nonatomic) Reachability *hostReachability;
@property (strong, nonatomic) Reachability *internetReachability;
@property (strong, nonatomic) Reachability *wifiReachability;

@end

@implementation LoginViewController

// ...

- (void)setupReachabilityMonitoring
{
    [NSNotificationCenter.defaultCenter addObserver:self
                                           selectorselector(reachabilityChanged
                                               name:kReachabilityChangedNotification
                                             object:nil];

    _hostReachability = [Reachability reachabilityWithHostName"8.8.8.8"];
    [_hostReachability startNotifier];

    _internetReachability = [Reachability reachabilityForInternetConnection];
    [_internetReachability startNotifier];

    _wifiReachability = [Reachability reachabilityForLocalWiFi];
    [_wifiReachability startNotifier];

    [self logReachabilityStatus];
}

- (void)reachabilityChangedNSNotification *)notification
{
    if ([notification.object isKindOfClass:Reachability.class]) {
        [self logReachabilityStatus];
    }
}

- (void)logReachabilityStatus
{
    NSString *hostStatus = _hostReachability.currentReachabilityStatus ? @"up" : @"down";
    NSString *internetStatus = _internetReachability.currentReachabilityStatus ? @"up" : @"down";
    NSString *wifiStatus = _wifiReachability.currentReachabilityStatus ? @"up" : @"down";

    NSLog(@"Internet is %@, wifi is %@, host is %@", internetStatus, wifiStatus, hostStatus);
}

@end

关于ios - 可达性不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22810545/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap