当用户尝试更改自定义UISwitch
中UITableViewCell
的状态时,如果没有活动的互联网连接,我想通知用户不允许这样做。我的问题是决定在哪里放置互联网连接检查逻辑。将它放在自定义单元类中是最容易的,但这是一个视图类,并且遵循MVC设计模式,这可能不是最好的方法。
我试图搜索我的问题的答案,但找不到任何可以帮助我做出决定的答案。
提前感谢您提供任何有用的建议。
答案 0 :(得分:2)
首先,您从下面的链接下载了Reachability类。
然后在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.当用户点击一个开关时。