直接从自定义UITableViewCell检查Internet连接

时间:2015-12-10 09:08:30

标签: ios objective-c uitableview internet-connection

当用户尝试更改自定义UISwitchUITableViewCell的状态时,如果没有活动的互联网连接,我想通知用户不允许这样做。我的问题是决定在哪里放置互联网连接检查逻辑。将它放在自定义单元类中是最容易的,但这是一个视图类,并且遵循MVC设计模式,这可能不是最好的方法。

我试图搜索我的问题的答案,但找不到任何可以帮助我做出决定的答案。

提前感谢您提供任何有用的建议。

3 个答案:

答案 0 :(得分:2)

首先,您从下面的链接下载了Reachability类。

Reachability Class

然后在AppDelegate.h文件中导入Reachability类。

#import Reachability.h

请在AppDelegate.h文件中写下以下代码。

@property(nonatomic)Reachability *internetReachability;
@property(nonatomic)BOOL isInternet;

请注意, APP_DELEGATE 是AppDelegate的一个实例, IS_INTERNET 是在AppDelegate.h文件中声明的isInternet变量的实例。

#define APP_DELEGATE ((AppDelegate *)[[UIApplication sharedApplication] delegate])
#define IS_INTERNET APP_DELEGATE.isInternet

之后,只需将以下代码复制并粘贴到AppDelegate.m文件中,然后在 didFinishLaunchingWithOptions 方法中调用 setupTheInternetConnection 方法。

-(void)setupTheInternetConnection {    

    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

    //Setup Internet Connection
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name:kReachabilityChangedNotification object:nil];

    self.internetReachability = [Reachability reachabilityForInternetConnection];
    [self.internetReachability startNotifier];
    [self updateInterfaceWithReachability:self.internetReachability];
}

- (void) reachabilityChanged:(NSNotification *)note {

    Reachability* curReach = [note object];
    NSParameterAssert([curReach isKindOfClass:[Reachability class]]);
    [self updateInterfaceWithReachability:curReach];
}

- (void) updateInterfaceWithReachability: (Reachability*) curReach {

    if(curReach == self.internetReachability) {

        NetworkStatus netStatus = [curReach currentReachabilityStatus];

        switch (netStatus) {

            case NotReachable: {

                IS_INTERNET = FALSE;
                break;
            }

            case ReachableViaWWAN: {

                IS_INTERNET = TRUE;
                break;
            }

            case ReachableViaWiFi: {

                IS_INTERNET = TRUE;
                break;
            }
        }
    }
}

现在,您可以使用 IS_INTERNET 的值检查任何控制器中的互联网连接。

希望它对你有用。

答案 1 :(得分:1)

我通常有NetworkManager具有所有逻辑。

#import "NetworkManager.h"
#import <Reachability.h>
@implementation NetworkManager

+ (void)performActionIfConnection:(void(^)())action andError:(void(^)())error{
    if ([NetworkManager test]) {
        if (action) {
            action();
        }
    }else{
        if (error) {
            error();
        }
    }
}

+ (BOOL) test
{
    Reachability *reach = [Reachability reachabilityForInternetConnection];
    NetworkStatus remoteHostStatus = [reach currentReachabilityStatus];
    return !(remoteHostStatus == NotReachable);
}

@end

答案 2 :(得分:-1)

您的手机不应该知道 AT ALL 的过程。

潜在的架构是让视图控制器不断了解互联网连接。这可以通过更新VC关于网络更改的网络程序类来实现。这样VC就可以发出适当的警告e.t.c.当用户点击一个开关时。