中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-07-10 19:39:36 來源:網絡 閱讀:359 作者:tony關東升 欄目:移動開發

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

為了學習這些API的使用我們MyNotes“備忘錄”應用實例,數據來源于服務器端,而不是本地的Notes.xml(或Notes.json)文件。

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

 

  1. #import <UIKit/UIKit.h> 
  2.  
  3. #import “NSString+URLEncoding.h” 
  4.  
  5. #import “NSNumber+Message.h” 
  6.  
  7.   
  8.  
  9. @interface MasterViewController : UITableViewController 
  10.  
  11.   
  12.  
  13. @property (strong, nonatomic) DetailViewController *detailViewController; 
  14.  
  15. //保存數據列表 
  16.  
  17. @property (nonatomic,strong) NSMutableArray* listData; 
  18.  
  19.   
  20.  
  21. //重新加載表視圖 
  22.  
  23. -(void)reloadView:(NSDictionary*)res; 
  24.  
  25.   
  26.  
  27. //開始請求Web Service 
  28.  
  29. -(void)startRequest; 
  30.  
  31.   
  32.  
  33. @end 

 

其中引入頭文件NSString+URLEncoding.h文件是在程序中需要對URL進行編碼處理。引入頭文件 NSNumber+Message.h文件是處理把服務器返回消息代碼轉換為用戶能看懂的消息。MasterViewController.m中的主要代 碼如下:

 

  1. - (void)viewDidLoad 
  2.  
  3.  
  4. [super viewDidLoad]; 
  5.  
  6. self.navigationItem.leftBarButtonItem = self.editButtonItem; 
  7.  
  8. self.detailViewController  = (DetailViewController *) 
  9.  
  10. [[self.splitViewController.viewControllers lastObject] topViewController]; 
  11.  
  12. [self startRequest];                                                ① 
  13.  
  14.  
  15.   
  16.  
  17. #pragma mark – Table View 
  18.  
  19. - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
  20.  
  21. return 1
  22.  
  23.  
  24.   
  25.  
  26. - (NSInteger)tableView:(UITableView *)tableView 
  27.  
  28. numberOfRowsInSection:(NSInteger)section { 
  29.  
  30. return self.listData.count; 
  31.  
  32.  
  33.   
  34.  
  35. - (UITableViewCell *)tableView:(UITableView *)tableView 
  36.  
  37. cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
  38.  
  39. UITableViewCell *cell 
  40.  
  41. = [tableView dequeueReusableCellWithIdentifier:@"Cell" 
  42.  
  43. forIndexPath:indexPath]; 
  44.  
  45. NSMutableDictionary*  dict = self.listData[indexPath.row]; 
  46.  
  47. cell.textLabel.text = [dict objectForKey:@"Content"]; 
  48.  
  49. cell.detailTextLabel.text = [dict objectForKey:@"CDate"]; 
  50.  
  51. return cell; 
  52.  

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

 

  1. /* 
  2.  
  3. * 開始請求Web Service 
  4.  
  5. */ 
  6.  
  7. -(void)startRequest 
  8.  
  9.  
  10. NSString *strURL = [[NSString alloc] initWithFormat: 
  11.  
  12. @”http://iosbook3/mynotes/webservice.php?email=%@&type=%@&action=%@”, 
  13.  
  14. @”<你的iosbook1.com用戶郵箱>”,@”JSON”,@”query”];                           ① 
  15.  
  16. NSURL *url = [NSURL URLWithString:[strURL URLEncodedString]];             ② 
  17.  
  18. NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];               ③ 
  19.  
  20. NSData *data  = [NSURLConnection sendSynchronousRequest:request 
  21.  
  22. returningResponse:nil error:nil];                       ④ 
  23.  
  24. NSLog(@”請求完成…”); 
  25.  
  26. NSDictionary *resDict = [NSJSONSerialization JSONObjectWithData:data 
  27.  
  28. options:NSJSONReadingAllowFragments error:nil]; 
  29.  
  30. [self reloadView:resDict];                                              ⑤ 
  31.  

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

 

  1. @interface NSString (URLEncoding) 
  2.  
  3.   
  4.  
  5. -(NSString *)URLEncodedString; 
  6.  
  7. -(NSString *)URLDecodedString; 
  8.  
  9.   
  10.  
  11. @end 
  12.  
  13.   
  14.  
  15. @implementation NSString (URLEncoding) 
  16.  
  17.   
  18.  
  19. - (NSString *)URLEncodedString 
  20.  
  21.  
  22. NSString *result = (NSString *) 
  23.  
  24. CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,① 
  25.  
  26. (CFStringRef)self, 
  27.  
  28. NULL,                           ② 
  29.  
  30. CFSTR(“+$,#[] “),                      ③ 
  31.  
  32. kCFStringEncodingUTF8)); 
  33.  
  34. return result; 
  35.  
  36.  
  37. - (NSString*)URLDecodedString 
  38.  
  39.  
  40. NSString *result = (NSString *) 
  41.  
  42. CFBridgingRelease(CFURLCreateStringByReplacingPercentEscapesUsingEncoding 
  43.  
  44. (kCFAllocatorDefault,                                                 ③ 
  45.  
  46. (CFStringRef)self, CFSTR(“”),                                       ④ 
  47.  
  48. kCFStringEncodingUTF8)); 
  49.  
  50. return result; 
  51.  
  52.  
  53. @end 

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

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

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

义乌市| 久治县| 峨边| 松阳县| 大洼县| 乌兰县| 凤冈县| 汉中市| 栖霞市| 横山县| 金溪县| 昭觉县| 阜城县| 偃师市| 皋兰县| 英德市| 绿春县| 苗栗市| 突泉县| 东辽县| 南岸区| 陕西省| 兰州市| 山西省| 黔南| 五家渠市| 化德县| 井陉县| 蕉岭县| 光山县| 清水河县| 定远县| 竹北市| 融水| 三台县| 安化县| 历史| 宁远县| 桃园市| 横峰县| 大邑县|