iOS開發那些事-iOS網路編程同步GET方法請求編程

來源:互聯網
上載者:User

iOS SDK為HTTP請求提供了同步和非同步請求兩種不同的API,而且可以使用GET或POST等要求方法。我們先瞭解其中最為簡單的同步GET方法請求。

為了學習這些API的使用MyNotes“備忘錄”應用執行個體,是資料來源於伺服器端,而不是本地的Notes.xml(或Notes.json)檔案。

首先實現查詢業務,查詢業務請求可以在主視圖控制器MasterViewController類中實現,其中MasterViewController.h代碼如下:

#import <UIKit/UIKit.h>#import “NSString+URLEncoding.h”#import “NSNumber+Message.h” @interface MasterViewController : UITableViewController @property (strong, nonatomic) DetailViewController *detailViewController;//儲存資料列表@property (nonatomic,strong) NSMutableArray* listData; //重新載入表視圖-(void)reloadView:(NSDictionary*)res; //開始請求Web Service-(void)startRequest; @end

 

 

其中引入標頭檔NSString+URLEncoding.h檔案是在程式中需要對URL進行編碼處理。引入標頭檔 NSNumber+Message.h檔案是處理把伺服器返回訊息代碼轉換為使用者能看懂的訊息。MasterViewController.m中的主要代 碼如下:

- (void)viewDidLoad{[super viewDidLoad];self.navigationItem.leftBarButtonItem = self.editButtonItem;self.detailViewController  = (DetailViewController *)[[self.splitViewController.viewControllers lastObject] topViewController];[self startRequest];                                                ①} #pragma mark – Table View- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {return 1;} - (NSInteger)tableView:(UITableView *)tableViewnumberOfRowsInSection:(NSInteger)section {return self.listData.count;} - (UITableViewCell *)tableView:(UITableView *)tableViewcellForRowAtIndexPath:(NSIndexPath *)indexPath {UITableViewCell *cell= [tableView dequeueReusableCellWithIdentifier:@"Cell"forIndexPath:indexPath];NSMutableDictionary*  dict = self.listData[indexPath.row];cell.textLabel.text = [dict objectForKey:@"Content"];cell.detailTextLabel.text = [dict objectForKey:@"CDate"];return cell;}

 

 

其中第①行代碼[self startRequest]調用自己的方法startRequest實現請求Web Service。MasterViewController.m中的startRequest方法代碼如下:

/** 開始請求Web Service*/-(void)startRequest{NSString *strURL = [[NSString alloc] initWithFormat:@”http://iosbook3/mynotes/webservice.php?email=%@&type=%@&action=%@”,@”<你的iosbook1.com使用者郵箱>”,@”JSON”,@”query”];                           ①NSURL *url = [NSURL URLWithString:[strURL URLEncodedString]];             ②NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];               ③NSData *data  = [NSURLConnection sendSynchronousRequest:requestreturningResponse:nil error:nil];                       ④NSLog(@”請求完成…”);NSDictionary *resDict = [NSJSONSerialization JSONObjectWithData:dataoptions:NSJSONReadingAllowFragments error:nil];[self reloadView:resDict];                                              ⑤}

 

 

此外,我們在前文中還提到了一個分類NSString (URLEncoding),它的作用是對URL編碼和解碼,它的代碼如下:

@interface NSString (URLEncoding) -(NSString *)URLEncodedString;-(NSString *)URLDecodedString; @end @implementation NSString (URLEncoding) - (NSString *)URLEncodedString{NSString *result = (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,①(CFStringRef)self,NULL,                           ②CFSTR(“+$,#[] “),                      ③kCFStringEncodingUTF8));return result;}- (NSString*)URLDecodedString{NSString *result = (NSString *)CFBridgingRelease(CFURLCreateStringByReplacingPercentEscapesUsingEncoding(kCFAllocatorDefault,                                                 ③(CFStringRef)self, CFSTR(“”),                                       ④kCFStringEncodingUTF8));return result;}@end

 

 

第①行代碼CFURLCreateStringByAddingPercentEscape函數是Core Foundation架構提供的C函數,可以把內容轉換成為URL編碼。第②行參數指定了將本身為非法URL字元不進行編碼的字元集合,例如:“!* ()”等符號。第③行參數是將本身為合法URL字元需要進行編碼的字元集合。

第③行代碼CFURLCreateStringByReplacingPercentEscapesUsingEncoding函數是Core Foundation架構提供的C函數,它與上面CFURLCreateStringByAddingPercentEscape函數截然相反,是進行 URL解碼的。第④行的參數指定不進行解碼的字元集。

Foundation架構也提供了基於Objective-C的方法進行URL編碼和解碼,與 CFURLCreateStringByAddingPercentEscape函數對應的NSString方法是 stringByAddingPercentEscapesUsingEncoding。與 CFURLCreateStringByReplacingPercentEscapesUsingEncoding函數對應的NSString方法是 stringByReplacingPercentEscapesUsingEncoding:,由於這些方法不能自訂是否要編碼和解碼的字元集,因此 沒有上面的函數靈活。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.