Ios Internet可达性在iPhone中无法正常工作

Ios Internet可达性在iPhone中无法正常工作,ios,objective-c,iphone,reachability,Ios,Objective C,Iphone,Reachability,我正在开发一个应用程序,它可以持续跟踪互联网连接并上传一些数据,该应用程序的功能是,当互联网不可用时,它会离线保存数据(照片),在互联网可用时,它会上传数据。我的应用程序工作正常,但有时它不会检查互联网,当我关闭设备wifi并再次打开时,它工作正常,所以有人能告诉我是什么问题让我卡住了吗?我的可达性代码如下: 代码 - (void)reachabilityCheck { /* Internet checking */ [[NSNotificationCenter default

我正在开发一个应用程序,它可以持续跟踪互联网连接并上传一些数据,该应用程序的功能是,当互联网不可用时,它会离线保存数据(照片),在互联网可用时,它会上传数据。我的应用程序工作正常,但有时它不会检查互联网,当我关闭设备wifi并再次打开时,它工作正常,所以有人能告诉我是什么问题让我卡住了吗?我的可达性代码如下:

代码

- (void)reachabilityCheck
{
    /* Internet checking  */
    [[NSNotificationCenter defaultCenter] addObserver:self  selector:@selector(reachabilityChanged:) name:kReachabilityChangedNotification object:nil];

    Reachability *reach = [Reachability reachabilityForInternetConnection];
    reach.reachableOnWWAN = YES;
    [reach startNotifier];
    NetworkStatus internetStatus = [reach currentReachabilityStatus];
    if (internetStatus != NotReachable) {
        //Develop By Payal
        if(self.internetConnection == 0)
        {
            NSLog(@"Connection active");
            self.internetConnection = 1;
        }
        //Develop By Payal Done
    }
    else {
        NSLog(@"Connection inactive");
        self.internetConnection = 0;
    }
}
试试这个代码

将下面的代码放入
viewDidLoad
方法中 它调用即时使用通知

[[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(checkNetworkStatus:)
                                                 name:kReachabilityChangedNotification object:nil];



//Net Connection Chack
- (void)checkNetworkStatus:(NSNotification *)notice
{
    // called after network status changes

    NetworkStatus internetStatus = [internetReachable currentReachabilityStatus];
    switch (internetStatus)
    {
        case NotReachable:
        {
            NSLog(@"The internet is down.");
            UIAlertView *alrt=[[UIAlertView alloc]initWithTitle:@"Error" message:@"No Internet Connection\nPlease Check The Connection" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
            [alrt show];

            break;
        }
        case ReachableViaWiFi:
        {
            NSLog(@"The internet is working via WIFI");
            break;
        }
        case ReachableViaWWAN:
        {
            NSLog(@"The internet is working via WWAN!");
            break;
        }
    }
}
我希望这对你有用

试试这段代码

将下面的代码放入
viewDidLoad
方法中 它调用即时使用通知

[[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(checkNetworkStatus:)
                                                 name:kReachabilityChangedNotification object:nil];



//Net Connection Chack
- (void)checkNetworkStatus:(NSNotification *)notice
{
    // called after network status changes

    NetworkStatus internetStatus = [internetReachable currentReachabilityStatus];
    switch (internetStatus)
    {
        case NotReachable:
        {
            NSLog(@"The internet is down.");
            UIAlertView *alrt=[[UIAlertView alloc]initWithTitle:@"Error" message:@"No Internet Connection\nPlease Check The Connection" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
            [alrt show];

            break;
        }
        case ReachableViaWiFi:
        {
            NSLog(@"The internet is working via WIFI");
            break;
        }
        case ReachableViaWWAN:
        {
            NSLog(@"The internet is working via WWAN!");
            break;
        }
    }
}

我希望这对您有用

代码的问题是您可能没有观察到任何连接更改

我不确定您在关闭和打开wifi连接时使用了什么触发器使代码正常工作

您可以使用Apple提供的
可达性
类,而不是使用计时器手动检查连接

您可以导入该类,然后在viewDidLoad(或appDelegate didFinishLaunchingWithOptions方法,如果需要全局观察者)中注册任何连接更改

编辑:
您可以定义以下两个场景来测试代码

  • 当我关闭应用程序,重新打开应用程序,然后打开wifi时,它会起作用
  • 当我第一次打开wifi然后重新打开应用程序时,它不工作
  • 在场景1中,您的观察者知道连接更改,因为应用程序仍然处于活动状态。但是,在场景2中,您的应用程序没有任何连接更改信息,因为在您打开应用程序后没有任何更改


    如果您想在场景2中实现您想要的(将媒体上载到服务器),那么可访问性更改并不是您需要的工具。

    代码的问题在于您可能没有观察到任何连接更改

    我不确定您在关闭和打开wifi连接时使用了什么触发器使代码正常工作

    您可以使用Apple提供的
    可达性
    类,而不是使用计时器手动检查连接

    您可以导入该类,然后在viewDidLoad(或appDelegate didFinishLaunchingWithOptions方法,如果需要全局观察者)中注册任何连接更改

    编辑:
    您可以定义以下两个场景来测试代码

  • 当我关闭应用程序,重新打开应用程序,然后打开wifi时,它会起作用
  • 当我第一次打开wifi然后重新打开应用程序时,它不工作
  • 在场景1中,您的观察者知道连接更改,因为应用程序仍然处于活动状态。但是,在场景2中,您的应用程序没有任何连接更改信息,因为在您打开应用程序后没有任何更改


    如果你想在场景2中实现你想要的(将媒体上传到服务器),那么可达性更改并不是你需要的工具。

    你好,nikunj非常感谢你的快速回答,我只是注意到当我关闭并再次打开iPhone的wifi,然后上传数据时,那么,你能告诉我问题出在哪里吗?亲爱的,我必须把你的代码放在哪里?请帮助我,我从一周以来一直坚持这一点。我希望你能帮助我…:(您的代码已被弃用,此代码不能正常工作。如果我的代码正常工作,请投票并接受我的答案@jigarjims7ok brother,让我先试试。如果问题仍然存在,希望您能提供帮助。:)您好,同样的问题仍然存在。请帮助我,问题是当我第一次打开wifi时,上传不起作用,但当我刚刚关闭wifi并再次开始上传时。工作正常。我在appdelegate中使用了可达性,并在特定时间使用了一个计时器来检查互联网。我再次想解释我的情况是,当我上传时g y媒体在离线模式下,它保存在设备中,然后我从后台关闭应用程序并打开wifi,然后重新打开应用程序,所以现在互联网来了,但在这种情况下它不工作..你好,nikunj非常感谢你的快速回答,我只是注意到,当我关闭并再次打开iPhone的wifi时,然后上传数据工作,所以你可以亲爱的,请帮助我,我从一个星期以来一直坚持这一点。我希望你能帮助我…:(您的代码已被弃用,此代码不能正常工作。如果我的代码正常工作,请投票并接受我的答案@jigarjims7ok brother,让我先试试。如果问题仍然存在,希望您能提供帮助。:)您好,同样的问题仍然存在。请帮助我,问题是当我第一次打开wifi时,上传不起作用,但当我刚刚关闭wifi并再次开始上传时。工作正常。我在appdelegate中使用了可达性,并在特定时间使用了一个计时器来检查互联网。我再次想解释我的情况是,当我上传时g y媒体在脱机模式下,它保存在设备中,然后我从后台关闭应用程序并打开wifi,然后重新打开应用程序,所以现在互联网即将到来,但在这种情况下它不起作用。我在appdelegate中使用了可达性,并在特定时间使用计时器检查互联网。我想再次解释我的情况,当我在offlin中上载y媒体时e模式,它保存在设备中,然后我从后台关闭应用程序并打开wifi,然后重新打开应用程序,所以现在互联网即将到来,但在这种情况下,它不起作用。1.应用程序脱机->保存到设备2.你杀死应用程序3.你打开连接4.你重新打开应用程序。因为连接通知根本没有运行按这四个阶段,你的代码肯定无法工作。请尝试跳过第2步,并在不关闭你的应用程序的情况下打开连接。因此,如果我不想跳过第2步,该怎么办?正如我跳过第2步所知道的,我的代码