2

我正在为 iOS6.0 和 > 开发一个应用程序。它是基于标签的导航控制器应用程序

我说 10 个UIViewControllers,每个视图控制器都需要互联网才能工作。

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

PS我完全知道Reachability类。但我不想在所有 10 个视图控制器中设置可达性更改通知。

必须有某种方法可以做到这一点,这意味着无论我是什么视图控制器,它都会显示 No Internet View 并且当互联网恢复时它会像往常一样工作。诸如当前没有 Internet 视图当 Internet 不存在时或类似的东西。但不确定如何?

虽然不确定但我听说 Apple 提供了一些东西,在应用程序顶部显示“无互联网”消息,并且除非互联网恢复,否则不允许用户导航。

我需要完全一样的。

任何成功的指南都将不胜感激。

4

4 回答 4

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而您不必再关心它了。

于 2013-08-01T14:05:29.687 回答
0

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

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

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

}
于 2013-08-01T13:42:38.260 回答
0

您可以使用此 Control SMBInternetConnectionIndicator

于 2014-07-15T10:43:15.303 回答
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;
}
于 2014-07-15T10:57:30.843 回答