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

iPhone網(wǎng)絡(luò)開發(fā)教程

移動開發(fā) iOS
iPhone網(wǎng)絡(luò)開發(fā)教程是本文要介紹的內(nèi)容,開發(fā)Web等網(wǎng)絡(luò)應(yīng)用程序的時候,需要確認網(wǎng)絡(luò)環(huán)境,連接情況等信息。如果沒有處理它們,是不會通過Apple的審查的。

iPhone網(wǎng)絡(luò)開發(fā)教程是本文要介紹的內(nèi)容,詳細的講解了iphone網(wǎng)絡(luò)的開發(fā)。不多說,一起來看詳細內(nèi)容。

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

1. 添加源文件和framework
   
開發(fā)Web等網(wǎng)絡(luò)應(yīng)用程序的時候,需要確認網(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)
    
Reachability.h中定義了三種網(wǎng)絡(luò)狀態(tài):

  1. typedef enum {  
  2.     NotReachable = 0,            //無連接  
  3.     ReachableViaWiFi,            //使用3G/GPRS網(wǎng)絡(luò)  
  4.     ReachableViaWWAN            //使用WiFi網(wǎng)絡(luò)  
  5. } NetworkStatus;  
  6.  
  7. 這樣檢查網(wǎng)絡(luò)狀態(tài):  
  8.  
  9. Reachability *r = [Reachability reachabilityWithHostName:@“www.apple.com”];  
  10. switch ([r currentReachabilityStatus]) {  
  11.         case NotReachable:  
  12.                 // 沒有網(wǎng)絡(luò)連接  
  13.                 break;  
  14.         case ReachableViaWWAN:  
  15.                 // 使用3G網(wǎng)絡(luò)  
  16.                 break;  
  17.         case ReachableViaWiFi:  
  18.                 // 使用WiFi網(wǎng)絡(luò)  
  19.                 break;  

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


二、使用NSConnection下載數(shù)據(jù)

1、創(chuàng)建NSConnection對象,設(shè)置委托對象

  1.  
  2. NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:[self urlString]]];  
  3. [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.         
  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;  

三、使用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. 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. - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string  
  37. {  
  38.     // 取得元素的text  
  39. }  
  40. NSError *parseError = nil;  
  41. [self parseXMLFileAtURL:[NSURL URLWithString:feedURLString] parseError:&parseError]; 

小結(jié):iPhone網(wǎng)絡(luò)開發(fā)教程的內(nèi)容介紹完了,希望通過本文的學習對你有所幫助!

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

2011-08-05 16:10:31

iPhone 網(wǎng)絡(luò) NSURLConne

2011-08-02 17:37:01

IPhone開發(fā) 環(huán)境搭建

2011-07-08 14:58:16

iPhone Xcode iOS

2011-07-08 16:02:24

iphone

2011-08-10 18:24:22

iPhone 圖形 繪圖

2011-07-21 10:29:18

iPhone 開發(fā)

2011-08-09 13:10:32

iPhone地圖開發(fā)

2011-07-18 09:35:29

iPhone 框架

2011-08-15 11:31:27

iPhone開發(fā)日志

2011-07-27 16:46:04

iPhone iPhone破解 MacPort

2011-08-12 10:09:23

iPhone開發(fā)多線程

2011-07-18 11:07:12

iPhone 游戲 引擎

2011-07-18 10:53:09

2011-07-21 14:07:29

iPhone 網(wǎng)絡(luò) 流量

2011-07-18 12:29:10

2011-07-27 17:24:31

iPhone NSXMLParse XML

2011-07-18 11:23:29

iPhone 游戲 動畫

2011-08-16 10:01:02

2011-08-22 12:01:38

iPhone開發(fā)文件

2011-08-08 18:19:09

iPhone音頻播放
點贊
收藏

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