1.ios平台是按照一直有網路連線的思路來設計的,開發者利用這一特點創造了很多優秀的第三方應用。大多數的ios應用都需要聯網,甚至有些應用嚴重依賴網路,沒有網路就無法正常工作。
2.在你的應用嘗試通過網路獲取資料之前,你需要知道當前裝置是否知道連線上了網路,甚至有時候你可能還需要知道當前網路是由wifi還是由移動蜂窩網路提供的。
3.「在網路訪問失敗的時候,應用沒有做出適當的提示」是蘋果的ios審核團隊拒絕乙個應用的常見理由。蘋果要求你必須先檢測網路連線狀態,當網路不可用的時候以某種方式告知使用者,或者用其他優雅的方式進行處理。
reachability類:
1.這個類用於檢測當前網路狀態,它不是sdk的一部分,可以在ios developer library裡找到這份**。
2.重用reachability類
(1)把reachability.h和reachability.m檔案拖到專案中。
(2)新增框架:systemconfiguration.framework。
3.同步的reachability
(1)使用同步的方式是比較簡單,匯入reachability.h標頭檔案,然後通過**檢查網路:
#import 「reachability.h」
。。。some code omitted…
reachability *reach = [reachability reachabilityforinternetconnection];
networkstatus status = [reach currentreachabilitystatus];
(2)通過檢查某個主機能否訪問來判斷當前網路是否可用:
networkstatus status = [reach currentreachabilitystatus];
(3)案例:
建立乙個工程,並新增reachability.h和reachability.m到工程中,並鏈結systemconfiguration.framework.
#import #import "reachability.h"
-(nsstring *)stringfromstatus:(networkstatus)status;
@end
reachability *reach = [reachability reachabilityforinternetconnection];
networkstatus status = [reach currentreachabilitystatus];
uialertview *alert = [[uialertview alloc]initwithtitle:@"reachability" message:[self stringfromstatus:status] delegate:nil cancelbuttontitle:@"ok" otherbuttontitles:nil];
[alert show];
return yes;
}-(nsstring *)stringfromstatus:(networkstatus)status
return string;
}4.非同步的reachability
(1)非同步的方式稍微複雜,不過通過這種方式可以來訂閱實時的網路狀態變化通知。匯入reachability.h標頭檔案,然後註冊乙個物件來訂閱網路狀態變化的資訊,網路狀態變化的資訊名稱為kreachabilitychanged-notification.如下:
[[nsnotificationcenter defaultcenter] addobserver:self
selector:@selector(reachabilitychanged:)
name:kreachabilitychangednotification
object:nil];
(2)你需要建立乙個reachability物件例項並開始向外發布網路狀態變化的訊息:
[reach startnotifier];
(3)當網路狀態發生變化的時候,reachability物件將呼叫reachabilitychanged:方法,可以在這個方法裡面獲取當前的網路狀態,然後做相應的處理。
- (void)reachabilitychanged:(nsnotification *)notification
}
5.原生 reachability api
前面將的reachability類實際上是蘋果公司對scnetworkreachability api的封裝,這個api定義在systemconfigure.framework庫中。如果有其他特別的需求,也可以直接使用這個原生的scnetworkreachability類。
6.可以為reachability增加2g/3g/4g的判斷
reachability.h裡增加三種狀態
typedef enum : nsinteger networkstatus;
reachability.m裡匯入#import
替換這個方法
- (networkstatus)networkstatusforflags:(scnetworkreachabilityflags)flags
networkstatus returnvalue = notreachable;
if ((flags & kscnetworkreachabilityflagsconnectionrequired) == 0)
if ((((flags & kscnetworkreachabilityflagsconnectionondemand ) != 0) ||
(flags & kscnetworkreachabilityflagsconnectionontraffic) != 0))
}if ((flags & kscnetworkreachabilityflagsiswwan) == kscnetworkreachabilityflagsiswwan)
else if ([networknamestring isequaltostring:ctradioaccesstechnologywcdma]||[networknamestring isequaltostring:ctradioaccesstechnologyhsdpa]||[networknamestring isequaltostring:ctradioaccesstechnologyhsupa]||[networknamestring isequaltostring:ctradioaccesstechnologyhsupa]||[networknamestring isequaltostring:ctradioaccesstechnologycdmaevdorev0]||[networknamestring isequaltostring:ctradioaccesstechnologycdmaevdoreva]||[networknamestring isequaltostring:ctradioaccesstechnologycdmaevdorevb]||[networknamestring isequaltostring:ctradioaccesstechnologyehrpd])else if ([networknamestring isequaltostring:ctradioaccesstechnologylte])else
}else
}else
}return returnvalue;
}
參考:
iOS檢測網路狀態
很多任務程多需要用到網路,時刻需要對網路鏈結進行判斷,下面介紹怎麼使用網路鏈結第三方,進行判斷網路以及判斷是wifi,4g網路等等 少說廢話上 import viewcontroller.h import reachability.h inte ce viewcontroller property ...
iOS 檢測網路狀態
1.為什麼要檢測網路狀態?1.1 讓使用者知道自己的網路狀態,防止使用者埋怨 這個應用太垃圾,獲取資料那麼慢 1.2 根據使用者的網路狀態,智慧型處理,提公升使用者體驗 例如某些手機瀏覽器,檢測到使用者網路是2g 3g時,會自動切換為無圖模式 2.手動觸發 如下 void touchesbegan ...
IOS檢測網路連線狀態
然後將reachability.h 和 reachability.m 加到自己的專案中,並引用systemconfiguration.framework,就可以使用了。reachability 中定義了3種網路狀態 the network state of the device for reacha...