成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

詳解Cocoa Touch網絡編程

移動開發 iOS
本文介紹的是Cocoa Touch網絡編程,很詳細的為大家介紹網絡編程的過程,我們先來看內容。

詳解Cocoa Touch網絡編程是本文要介紹的內容,不多說,不如我們先來看內容。

一:確認網絡環境3G/WIFI

1. 添加源文件和framework
   
開發Web等網絡應用程序的時候,需要確認網絡環境,連接情況等信息。如果沒有處理它們,是不會通過Apple的審查的。Apple 的 例程 Reachability 中介紹了取得/檢測網絡狀態的方法。要在應用程序程序中使用Reachability,首先要完成如下兩部:
   
1.1. 添加源文件:

在你的程序中使用 Reachability 只須將該例程中的 Reachability.h 和 Reachability.m 拷貝到你的工程中。
   
1.2.添加framework:

將SystemConfiguration.framework 添加進工程。如下圖:
   
2. 網絡狀態  

因此可以這樣檢查網絡狀態:

  1. Reachability *r = [Reachability reachabilityWithHostName:@“www.apple.com”];  
  2. switch ([r currentReachabilityStatus]) {  
  3.         case NotReachable:  
  4.                 // 沒有網絡連接  
  5.                 break;  
  6.         case ReachableViaWWAN:  
  7.                 // 使用3G網絡  
  8.                 break;  
  9.         case ReachableViaWiFi:  
  10.                 // 使用WiFi網絡  
  11.                 break;  

3.檢查當前網絡環境

程序啟動時,如果想檢測可用的網絡環境,可以像這樣

  1. // 是否wifi  
  2. + (BOOL) IsEnableWIFI {  
  3.     return ([[Reachability reachabilityForLocalWiFi] currentReachabilityStatus] != NotReachable);  
  4. }  
  5.  
  6. // 是否3G  
  7. + (BOOL) IsEnable3G {  
  8.     return ([[Reachability reachabilityForInternetConnection] currentReachabilityStatus] != NotReachable);  
  9. }  
  10. 例子:  
  11. - (void)viewWillAppear:(BOOL)animated {      
  12. if (([Reachability reachabilityForInternetConnection].currentReachabilityStatus == NotReachable) &&   
  13.         ([Reachability reachabilityForLocalWiFi].currentReachabilityStatus == NotReachable)) {  
  14.         self.navigationItem.hidesBackButton = YES;  
  15.         [self.navigationItem setLeftBarButtonItem:nil animated:NO];  
  16.     }  

4. 鏈接狀態的實時通知

網絡連接狀態的實時檢查,通知在網絡應用中也是十分必要的。接續狀態發生變化時,需要及時地通知用戶:Reachability 1.5版本

  1.  // My.AppDelegate.h  
  2.     #import "Reachability.h"  
  3.  
  4.     @interface MyAppDelegate : NSObject <UIApplicationDelegate> {  
  5.         NetworkStatus remoteHostStatus;  
  6.     }  
  7.  
  8.     @property NetworkStatus remoteHostStatus;  
  9.  
  10.     @end  
  11.  
  12.     // My.AppDelegate.m  
  13.     #import "MyAppDelegate.h"  
  14.  
  15.     @implementation MyAppDelegate  
  16.     @synthesize remoteHostStatus;  
  17.  
  18.     // 更新網絡狀態  
  19.     - (void)updateStatus {  
  20.         self.remoteHostStatus = [[Reachability sharedReachability] remoteHostStatus];  
  21.     }  
  22.  
  23.     // 通知網絡狀態  
  24. (void)reachabilityChanged:(NSNotification *)note {  
  25.         [self updateStatus];  
  26.         if (self.remoteHostStatus == NotReachable) {  
  27.             UIAlertView *alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"AppName", nil)  
  28.                          message:NSLocalizedString (@"NotReachable", nil)  
  29.                         delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil];  
  30.             [alert show];  
  31.             [alert release];  
  32.         }  
  33.     }  
  34.  
  35.     // 程序啟動器,啟動網絡監視  
  36. (void)applicationDidFinishLaunching:(UIApplication *)application {  
  37.       
  38.         // 設置網絡檢測的站點  
  39.         [[Reachability sharedReachability] setHostName:@"www.apple.com"];  
  40.         [[Reachability sharedReachability] setNetworkStatusNotificationsEnabled:YES];  
  41.         // 設置網絡狀態變化時的通知函數  
  42.         [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:)  
  43.                                                  name:@"kNetworkReachabilityChangedNotification" object:nil];  
  44.         [self updateStatus];  
  45.     }  
  46.  
  47.  (void)dealloc {  
  48.         // 刪除通知對象  
  49.         [[NSNotificationCenter defaultCenter] removeObserver:self];  
  50.         [window release];  
  51.         [super dealloc];  
  52.     }   
  53.       
  54.     Reachability 2.0版本  
  55.       
  56.  
  57.     // MyAppDelegate.h  
  58.     @class Reachability;  
  59.  
  60.         @interface MyAppDelegate : NSObject <UIApplicationDelegate> {  
  61.             Reachability  *hostReach;  
  62.         }  
  63.  
  64.     @end  
  65.  
  66.     // MyAppDelegate.m  
  67. (void)reachabilityChanged:(NSNotification *)note {  
  68.         Reachability* curReach = [note object];  
  69.         NSParameterAssert([curReach isKindOfClass: [Reachability class]]);  
  70.         NetworkStatus status = [curReach currentReachabilityStatus];  
  71.       
  72.         if (status == NotReachable) {  
  73.             UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"AppName""  
  74.                               message:@"NotReachable"  
  75.                               delegate:nil  
  76.                               cancelButtonTitle:@"YES" otherButtonTitles:nil];  
  77.                               [alert show];  
  78.                               [alert release];  
  79.         }  
  80.     }  
  81.                                 
  82. (void)applicationDidFinishLaunching:(UIApplication *)application {  
  83.         // ...  
  84.                     
  85.         // 監測網絡情況  
  86.         [[NSNotificationCenter defaultCenter] addObserver:self  
  87.                               selector:@selector(reachabilityChanged:)  
  88.                               name: kReachabilityChangedNotification  
  89.                               object: nil];  
  90.         hostReach = [[Reachability reachabilityWithHostName:@"www.google.com"] retain];  
  91.         hostReach startNotifer];  
  92.         // ...  
  93.     } 

二:使用NSConnection下載數據
   
1.創建NSConnection對象,設置委托對象

  1. NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:[self urlString]]];  
  2. [NSURLConnection connectionWithRequest:request delegate:self]; 

2. NSURLConnection delegate委托方法

  1.  (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response;    
  2.  (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error;    
  3. (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data;    
  4.  (void)connectionDidFinishLoading:(NSURLConnection *)connection;   

3. 實現委托方法

  1.  (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {  
  2.         // store data  
  3.         [self.receivedData setLength:0];            //通常在這里先清空接受數據的緩存  
  4.     }  
  5.       
  6. (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {  
  7.            /* appends the new data to the received data */  
  8.         [self.receivedData appendData:data];        //可能多次收到數據,把新的數據添加在現有數據最后  
  9.     }  
  10.  
  11.  (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {  
  12.         // 錯誤處理  
  13.     }  
  14.  
  15.  (void)connectionDidFinishLoading:(NSURLConnection *)connection {  
  16.         // disconnect  
  17.         [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;     
  18.         NSString *returnString = [[NSString alloc] initWithData:self.receivedData encoding:NSUTF8StringEncoding];  
  19.         NSLog(returnString);  
  20.         [self urlLoaded:[self urlString] data:self.receivedData];  
  21.         firstTimeDownloaded = YES;  
  22.     } 

三:使用NSXMLParser解析xml文件

1. 設置委托對象,開始解析

  1. NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];   //或者也可以使用initWithContentsOfURL直接下載文件,但是有一個原因不這么做:  
  2. // It's also possible to have NSXMLParser download the data, by passing it a URL, but this is not desirable  
  3. // because it gives less control over the network, particularly in responding to connection errors.  
  4. [parser setDelegate:self];  
  5. [parser parse]; 

 

2. 常用的委托方法

  1. (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName   
  2.                                 namespaceURI:(NSString *)namespaceURI  
  3.                                 qualifiedName:(NSString *)qName   
  4.                                 attributes:(NSDictionary *)attributeDict;  
  5. (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName   
  6.                                 namespaceURI:(NSString *)namespaceURI   
  7.                                 qualifiedName:(NSString *)qName;  
  8.  (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string;  
  9. (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError;  
  10.  
  11.     static NSString *feedURLString = @"http://www.yifeiyang.net/test/test.xml"; 

3.  應用舉例

  1.  (void)parseXMLFileAtURL:(NSURL *)URL parseError:(NSError **)error  
  2.     {  
  3.         NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:URL];  
  4.         [parser setDelegate:self];  
  5.         [parser setShouldProcessNamespaces:NO];  
  6.         [parser setShouldReportNamespacePrefixes:NO];  
  7.         [parser setShouldResolveExternalEntities:NO];  
  8.         [parser parse];  
  9.         NSError *parseError = [parser parserError];  
  10.         if (parseError && error) {  
  11.             *error = parseError;  
  12.         }  
  13.         [parser release];  
  14.     }  
  15.  
  16. (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI   
  17.                                         qualifiedName:(NSString*)qName attributes:(NSDictionary *)attributeDict{  
  18.         // 元素開始句柄  
  19.         if (qName) {  
  20.             elementName = qName;  
  21.         }  
  22.         if ([elementName isEqualToString:@"user"]) {  
  23.             // 輸出屬性值  
  24.             NSLog(@"Name is %@ , Age is %@", [attributeDict objectForKey:@"name"], [attributeDict objectForKey:@"age"]);  
  25.         }  
  26.     }  
  27.  
  28. (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI   
  29.                                         qualifiedName:(NSString *)qName  
  30.     {  
  31.         // 元素終了句柄  
  32.         if (qName) {  
  33.                elementName = qName;  
  34.         }  
  35.     }  
  36.  
  37. (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string  
  38.     {  
  39.         // 取得元素的text  
  40.     }  
  41. NSError *parseError = nil;  
  42.     [self parseXMLFileAtURL:[NSURL URLWithString:feedURLString] parseError:&parseError]; 

小結:詳解Cocoa Touch網絡編程的內容介紹完了,希望本文對你有所幫助!

責任編輯:zhaolei 來源: 互聯網
相關推薦

2011-08-11 15:46:55

CocoaCocoa Touch框架

2011-08-10 16:27:07

Cocoa TouchPlist

2011-05-11 10:28:03

2011-07-08 11:13:42

Cocoa Touch XCode

2011-08-03 10:24:22

Cocoa Touch 靜態庫

2011-07-18 15:08:34

2011-06-15 16:11:51

UIKitCocoa TouchiOS

2011-08-15 15:56:29

Cocoa編程模塊

2011-08-05 17:54:33

Cocoa Touch 多語言

2011-07-08 10:49:59

Cocoa Touch 靜態庫

2011-05-31 15:41:00

Cocoa TouchCocoaiOS

2011-08-10 18:47:18

Cocoa字符串

2011-07-22 15:50:06

Cocoa MVC 視圖

2011-06-27 15:39:51

Cocoa Touch

2011-06-27 16:00:34

視頻教程Cocoa TouchiOS應用

2011-08-15 14:27:51

CocoaRunLoop

2011-08-02 13:58:18

Cocoa 框架 Mac OS

2011-08-15 14:47:28

Cocoa嵌入資源文件

2011-07-28 16:52:34

Cocoa 框架 Mac Os

2011-07-26 15:29:36

Cocoa 模式
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品一区二区三区在线播放 | 99久久精品免费 | 日韩欧美精品 | 国产欧美精品一区二区色综合 | 日韩精品一区二区三区视频播放 | 亚洲性人人天天夜夜摸 | 自拍偷拍亚洲一区 | 成人久久18免费 | 日韩欧美理论片 | 欧美a级成人淫片免费看 | 国产一区二区三区在线 | 亚洲aⅴ | av网站免费在线观看 | 伊人伊人伊人 | 成人免费共享视频 | 欧美激情亚洲激情 | 国产极品粉嫩美女呻吟在线看人 | 精品免费国产一区二区三区四区 | 久久精品免费观看 | 午夜伦理影院 | 婷婷开心激情综合五月天 | 欧美一级在线 | 国产成人精品一区二区三区视频 | 午夜影院 | 欧美在线一区二区三区 | 日韩精品无码一区二区三区 | 欧美日韩精品综合 | 爽爽免费视频 | 黄色大片网 | 亚洲高清在线观看 | 国产视频精品在线 | 国产色爽 | 亚洲精品一区在线 | 国产成人在线视频免费观看 | 精品一区二区三区在线观看 | 一区二区三区av | 国产欧美综合在线 | 国产99热| 国产成人综合亚洲欧美94在线 | 91一区二区三区在线观看 | 国产精品久久久久久久久久久久冷 |