若不想寫繁瑣的網絡狀況判斷代碼,并且應用程式能自動在無網絡時彈出可跳轉到系統設定頁面的對話框,那麼可以考慮這麼做。
在項目中相應的**info.plist檔案中增加一個關鍵字:
<key>SBUsesNetwork</key>
<true/>
應用程式就會自動檢測網絡狀況,在網絡異常的情況下,會彈出網絡設定對話框提醒使用者是否進行網絡設定,并且可以跳轉至系統設定中進行昂立設定。
其實在iOS5.1+之後,蘋果就删除了程式跳轉至設定界面的功能了,不知道為什麼。。。
是以自己寫代碼也是不可能實作的,隻能夠對網絡進行監聽,然後提醒使用者網絡連結異常而已。
下面是監聽網絡改變的代碼,可以參考一下:
在AppDelegate.m中寫如下代碼:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
//開啟網絡狀況的監聽
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name:kReachabilityChangedNotification object:nil];
self.hostReach = [Reachability reachabilityWithHostName:@"www.baidu.com"] ;
[self.hostReach startNotifier]; //開始監聽,會啟動一個run loop
self.window.rootViewController = self.tabBarController;
[self.window makeKeyAndVisible];
return YES;
}
//網絡連結改變時會調用此方法
-(void)reachabilityChanged:(NSNotification *)note
{
Reachability *currReach = [note object];
NSParameterAssert([currReach isKindOfClass:[Reachability class]]);
//判斷目前網絡連接配接狀态
NetworkStatus status = [currReach currentReachabilityStatus];
//如果沒有連接配接到網絡就彈出提示
self.isReachable = YES;
if(status == NotReachable)
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"網絡連接配接異常" message:@"暫無法通路資訊" delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil];
[alert show];
self.isReachable = NO;
}
//在此不做連接配接正常時的提示,以防對使用者造成不必要的幹擾。
}
通過如上代碼,在應用程式的任何一個界面都可以使用下面的 單例來判斷網絡是否連接配接
AppDelegate *appDlg = (AppDelegate *)[[UIApplication sharedApplication] delegate];
if(appDlg.isReachable)
{
NSLog(@"網絡已連接配接");//執行網絡正常時的代碼
}
else
{
NSLog(@"網絡連接配接異常");//執行網絡異常時的代碼
}
然後就可以執行響應的操作了,這樣使用監聽的好處就是,不必在每一個需要檢測網絡連結情況的地方都寫一大堆代碼,隻需要上面的監聽,網絡改變的時候,在任何一個地方都可以自定提醒使用者。