整个应用程序“处理没有互联网”

时间:2013-08-01 13:35:46

标签: ios ios6 reachability

我正在为iOS6.0和>开发一款应用。它是基于选项卡的导航控制器应用程序

我说10 UIViewControllers并且每个viewcontroller都需要互联网才能工作。

所以现在我的问题是处理无互联网的最佳方式是什么?此外,如果Internet连接可用,则应用程序必须再次正常工作。

P.S。我完全了解Reachability课程。但我不想在所有10个视图控制器中设置可达性更改通知。

必须有一些方法来做到这一点意味着在任何视图控制器中,它将显示无互联网视图和当互联网回来时它照常工作。像现在没有互联网视图当互联网不存在或类似的东西。但不确定如何?

虽然不确定但是我听说Apple提供的东西在应用程序顶部显示“No Internet”消息,并且除非Internet返回,否则不允许用户导航。

我需要完全一样。

任何成功指南都将非常感激。

4 个答案:

答案 0 :(得分:4)

我会选择一种不同的方法。为什么不创建一个UIViewController子类来处理互联网连接通知?你可以做这样的半伪代码。我刚从头脑中写下这段代码。它可能包含错误。所以不要只是复制&糊。

@interface SMInternetBaseViewController : UIViewController {
    SMOverlay* overlay;
}
@end

@interface SMInternetBaseViewController()
- (void)reachabilityChanged:(NSNotification *) not;
@end

@implementation SMInternetBaseViewController
- (id)init {
    self = [super init];
    if (self) {
        // Register here the method reachabilityChanged for Reachability notifications 
    }
    return self;
}

- (void)reachabilityChanged:(NSNotification *) not
{
    // Define here how to behave for different notifications

    if (__NO_INTERNET__) {
        // Add an overlay to the view.
        if (!overlay) {
            overlay = [[SMOverlay alloc] init];
        }
        [self.view addSubview:overlay];
    }

    if (__AGAIN_INTERNET__) {
        [overlay removeFromSuperview];
    }

}
@end

然后,您可以轻松地创建此SMInternetBaseViewController的所有视图控制器子类,您不必再关心它了。

答案 1 :(得分:0)

您无需创建通知程序,您可以使用可达性类检查网络连接

Reachability *networkReachability = [Reachability reachabilityForInternetConnection];   
NetworkStatus networkStatus = [networkReachability currentReachabilityStatus];    

if (networkStatus == NotReachable)
{
  //Notify that internet is not available

}

答案 2 :(得分:0)

您可以使用此控件SMBInternetConnectionIndicator

答案 3 :(得分:0)

您的手机可能仍有互联网,但您的服务器或域可能已关闭,为了正确处理此问题,请使用以下内容与您的域名进行ping操作。

#import <SystemConfiguration/SystemConfiguration.h>

if ([self gotConnection]) //do what you want
else //warn that your server is down

- (BOOL)gotConnection
{
    static BOOL checkNetwork = YES;
    BOOL check;
    if (checkNetwork) {
        checkNetwork = NO;

        Boolean success;    
        const char *host_name = "<#yourdomain.com#>";

        SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithName(NULL, host_name);
        SCNetworkReachabilityFlags flags;
        success = SCNetworkReachabilityGetFlags(reachability, &flags);
        check = success && (flags & kSCNetworkFlagsReachable) && !(flags & kSCNetworkFlagsConnectionRequired);
        CFRelease(reachability);
    }
    return check;
}