我正在为iOS6.0和>开发一款应用。它是基于选项卡的导航控制器应用程序
我说10 UIViewControllers
并且每个viewcontroller都需要互联网才能工作。
所以现在我的问题是处理无互联网的最佳方式是什么?此外,如果Internet连接可用,则应用程序必须再次正常工作。
P.S。我完全了解Reachability
课程。但我不想在所有10个视图控制器中设置可达性更改通知。
必须有一些方法来做到这一点意味着在任何视图控制器中,它将显示无互联网视图和当互联网回来时它照常工作。像现在没有互联网视图当互联网不存在或类似的东西。但不确定如何?
虽然不确定但是我听说Apple提供的东西在应用程序顶部显示“No Internet”消息,并且除非Internet返回,否则不允许用户导航。
我需要完全一样。
任何成功指南都将非常感激。
答案 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;
}