自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

詳解Cocoa Touch網(wǎng)絡(luò)編程

移動開發(fā) iOS
本文介紹的是Cocoa Touch網(wǎng)絡(luò)編程,很詳細(xì)的為大家介紹網(wǎng)絡(luò)編程的過程,我們先來看內(nèi)容。

詳解Cocoa Touch網(wǎng)絡(luò)編程是本文要介紹的內(nèi)容,不多說,不如我們先來看內(nèi)容。

一:確認(rèn)網(wǎng)絡(luò)環(huán)境3G/WIFI

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

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

將SystemConfiguration.framework 添加進工程。如下圖:
   
2. 網(wǎng)絡(luò)狀態(tài)  

因此可以這樣檢查網(wǎng)絡(luò)狀態(tài):

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

3.檢查當(dāng)前網(wǎng)絡(luò)環(huán)境

程序啟動時,如果想檢測可用的網(wǎng)絡(luò)環(huán)境,可以像這樣

  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. 鏈接狀態(tài)的實時通知

網(wǎng)絡(luò)連接狀態(tài)的實時檢查,通知在網(wǎng)絡(luò)應(yīng)用中也是十分必要的。接續(xù)狀態(tài)發(fā)生變化時,需要及時地通知用戶: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.     // 更新網(wǎng)絡(luò)狀態(tài)  
  19.     - (void)updateStatus {  
  20.         self.remoteHostStatus = [[Reachability sharedReachability] remoteHostStatus];  
  21.     }  
  22.  
  23.     // 通知網(wǎng)絡(luò)狀態(tài)  
  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.     // 程序啟動器,啟動網(wǎng)絡(luò)監(jiān)視  
  36. (void)applicationDidFinishLaunching:(UIApplication *)application {  
  37.       
  38.         // 設(shè)置網(wǎng)絡(luò)檢測的站點  
  39.         [[Reachability sharedReachability] setHostName:@"www.apple.com"];  
  40.         [[Reachability sharedReachability] setNetworkStatusNotificationsEnabled:YES];  
  41.         // 設(shè)置網(wǎng)絡(luò)狀態(tài)變化時的通知函數(shù)  
  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.         // 監(jiān)測網(wǎng)絡(luò)情況  
  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下載數(shù)據(jù)
   
1.創(chuàng)建NSConnection對象,設(shè)置委托對象

  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. 實現(xiàn)委托方法

  1.  (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {  
  2.         // store data  
  3.         [self.receivedData setLength:0];            //通常在這里先清空接受數(shù)據(jù)的緩存  
  4.     }  
  5.       
  6. (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {  
  7.            /* appends the new data to the received data */  
  8.         [self.receivedData appendData:data];        //可能多次收到數(shù)據(jù),把新的數(shù)據(jù)添加在現(xiàn)有數(shù)據(jù)最后  
  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. 設(shè)置委托對象,開始解析

  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.  應(yīng)用舉例

  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]; 

小結(jié):詳解Cocoa Touch網(wǎng)絡(luò)編程的內(nèi)容介紹完了,希望本文對你有所幫助!

責(zé)任編輯:zhaolei 來源: 互聯(lián)網(wǎng)
相關(guān)推薦

2011-08-11 15:46:55

CocoaCocoa Touch框架

2011-08-10 16:27:07

Cocoa TouchPlist

2011-05-11 10:28:03

2011-06-15 16:11:51

UIKitCocoa TouchiOS

2011-07-18 15:08:34

2011-08-03 10:24:22

Cocoa Touch 靜態(tài)庫

2011-07-08 11:13:42

Cocoa Touch XCode

2011-08-15 15:56:29

Cocoa編程模塊

2011-08-05 17:54:33

Cocoa Touch 多語言

2011-07-08 10:49:59

Cocoa Touch 靜態(tài)庫

2011-05-31 15:41:00

Cocoa TouchCocoaiOS

2011-08-10 18:47:18

Cocoa字符串

2011-06-27 16:00:34

視頻教程Cocoa TouchiOS應(yīng)用

2011-06-27 15:39:51

Cocoa Touch

2011-07-22 15:50:06

Cocoa MVC 視圖

2011-08-15 14:27:51

CocoaRunLoop

2011-08-15 14:47:28

Cocoa嵌入資源文件

2011-08-02 13:58:18

Cocoa 框架 Mac OS

2011-07-26 15:29:36

Cocoa 模式

2011-07-28 16:52:34

Cocoa 框架 Mac Os
點贊
收藏

51CTO技術(shù)棧公眾號