你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> 開源中國iOS客戶端學習——網絡連接檢測

開源中國iOS客戶端學習——網絡連接檢測

編輯:IOS開發綜合
      開源中國iOS客戶端基於網絡同步數據,從而達到與網頁看到同樣數據效果,所以在啟動程序的時候需要檢查網絡;這也是每一個聯網應用啟動的第一步,如果聯網應用沒有檢查網絡,蘋果公司將不予以審核通過;        開源中國iOS客戶端大牛們在寫網絡檢測時很迷惑人,開始以為他們用的是ASI類庫做的網絡檢測,今天才看明白,他們並不是用的ASI類庫檢測,而是用到AFNetworking這個類庫裡一個實例方法做網絡連接檢測;   先看Appdelegate文件: 在application:didFinishLaunchingWithOptions:方法裡 [cpp]   //檢查網絡是否存在 如果不存在 則彈出提示       [Config Instance].isNetworkRunning = [CheckNetwork isExistenceNetwork];     在applicationDidBecomeActive:方法裡 [cpp]  - (void)applicationDidBecomeActive:(UIApplication *)application   {              [Config Instance].isNetworkRunning = [CheckNetwork isExistenceNetwork];       if ([Config Instance].isNetworkRunning == NO) {           UIAlertView *myalert = [[UIAlertView alloc] initWithTitle:@"警告" message:@"未連接網絡,將使用離線模式" delegate:self cancelButtonTitle:@"確認" otherButtonTitles:nil,nil];           [myalert show];       }   }     都用到了[Config Instance].isNetworkRunning = [CheckNetwork isExistenceNetwork];再看看Config和CheckNetwork這兩個類定義 Config類的Instance方法, [cpp]   static Config * instance = nil;   +(Config *) Instance   {       @synchronized(self)       {           if(nil == instance)           {               [self new];           }       }       return instance;   }   從字面意思也能推測出是給Cinfig類實例化用的,isNetworkRunning是BOOL型變量 CheckNetwork在ASIHttp文件裡,和ASI類庫放到一塊的,(裡面漢字出現亂碼) [cpp]  +(BOOL)isExistenceNetwork   {   //  BOOL isExistenceNetwork;   //  Reachability *r = [Reachability reachabilityWithHostName:@"www.oschina.net"];   //    switch ([r currentReachabilityStatus]) {   //        case NotReachable:   //          isExistenceNetwork=FALSE;   //            //   NSLog(@"娌℃湁缃戠粶");   //            break;   //        case ReachableViaWWAN:   //          isExistenceNetwork=TRUE;   //            //   NSLog(@"姝e湪浣跨敤3G缃戠粶");   //            break;   //        case ReachableViaWiFi:   //          isExistenceNetwork=TRUE;   //            //  NSLog(@"姝e湪浣跨敤wifi缃戠粶");           //            break;   //    }   //  return isExistenceNetwork;              return YES;   }   本來是使用蘋果官方提供的Reachability來檢測網絡連接狀況,但是大牛們又給注釋掉了,return YES; 也就是[Config Instance].isNetworkRunning=YES; 但是當我把iMac網線拔掉運行的時候卻能檢測出網絡無連接,通過查找 “錯誤 網絡無連接”      \     \ 發現他們都在AFNetworking類庫 - (void)postPath:(NSString *)path parameters:(NSDictionary *)parameters success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure  方法裡面, 這個方法使用AFHTTPRequestOperation和“PATCH”請求HTTP客戶端操作隊列,使用到了block塊(iOS 4.0+特性),URL請求成功執行success塊裡操作,這裡面block塊沒有返回值,接受兩個參數,創建請求操作和響應數據請求,URL請求失敗執行failure裡面的方法,這個block塊裡仍沒有返回值,接受兩個參數創建請求操作和NSError對象,描述網絡或解析錯誤狀況; 所以才有了上面截圖中網絡的連接檢測,拿源碼中一處來舉例
  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved