(1)xml 數(shù)據(jù)請求
使用 AFNetworking 中的 AFHTTPRequestOperation 和 AFXMLParserResponseSerializer,另外結(jié)合第三方框架 XMLDictionary 進(jìn)行數(shù)據(jù)轉(zhuǎn)換
使用 XMLDictionary 的好處:有效避免自行實現(xiàn) NSXMLParserDelegate 委托代理協(xié)議方法來進(jìn)行繁瑣的數(shù)據(jù)拼湊解析
(2)JSON 數(shù)據(jù)請求
使用 AFNetworking 中的 AFHTTPRequestOperation 或 AFHTTPRequestOperationManager,另外在圖片緩存方面可選的方案有:
使用 AFNetworking 中 的 UIImageView+AFNetworking
使用第三方框架 SDWebImage 的 UIImageView+WebCache
效果如下:
XML 數(shù)據(jù)格式:
請求網(wǎng)址:http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getWeatherbyCityName?theCityName=59287
1 <ArrayOfString xmlns="http://WebXml.com.cn/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 2 <string> 3 廣東 4 </string> 5 <string> 6 廣州 7 </string> 8 <string> 9 5928710 </string>11 <string>12 59287.jpg13 </string>14 <string>15 2015-9-19 17:30:3116 </string>17 <string>18 25℃/32℃19 </string>20 <string>21 9月19日 多云轉(zhuǎn)中雨22 </string>23 <string>24 無持續(xù)風(fēng)向微風(fēng)25 </string>26 <string>27 1.gif28 </string>29 <string>30 8.gif31 </string>32 <string>33 今日天氣實況:氣溫:31℃;風(fēng)向/風(fēng)力:西南風(fēng) 1級;濕度:62%;空氣質(zhì)量:暫無;紫外線強(qiáng)度:弱34 </string>35 <string>36 太陽鏡指數(shù):必要。建議佩戴透射比為1級的淺色太陽鏡。37 穿衣指數(shù):炎熱。建議穿短衫、短褲等清涼夏季服裝。38 旅游指數(shù):適宜。微風(fēng),雖天氣稍熱,但不會影響心情。39 運動指數(shù):較適宜。戶外運動請注意防曬。40 洗車指數(shù):不宜。有雨,雨水和泥水會弄臟愛車。41 化妝指數(shù):防脫水。請選用防脫水化妝品。42 感冒指數(shù):少發(fā)。感冒機(jī)率較低,避免長期處于空調(diào)屋中。43 空氣污染指數(shù):暫無。44 紫外線指數(shù):弱。輻射較弱,涂擦SPF12-15、PA+護(hù)膚品。45 舒適度指數(shù):較不舒適。多云,有些熱。46 </string>47 <string>48 25℃/29℃49 </string>50 <string>51 9月20日 中雨轉(zhuǎn)中到大雨52 </string>53 <string>54 無持續(xù)風(fēng)向微風(fēng)55 </string>56 <string>57 8.gif58 </string>59 <string>60 22.gif61 </string>62 <string>63 24℃/29℃64 </string>65 <string>66 9月21日 中到大雨轉(zhuǎn)雷陣雨67 </string>68 <string>69 無持續(xù)風(fēng)向微風(fēng)70 </string>71 <string>72 22.gif73 </string>74 <string>75 4.gif76 </string>77 <string>78 廣州是廣東省的省會,是中國南方最大的海濱城市,廣州位于東經(jīng)113。17`,北緯23。8`,地處中國大陸南部,廣東省南部,珠江三角洲北緣。廣州臨南海,鄰近香港特別行政區(qū),是中國通往世界的南大門,廣州屬丘陵地帶。中國的第三大河----珠江從廣州市中心穿流而過。廣州是一座歷史文化名城。相傳在遠(yuǎn)古時候,曾有五位仙人,身穿五色彩服、騎著嘴銜稻穗的五色仙羊降臨此地,把稻穗贈給百姓,祝愿這里永無饑荒。從此,廣州便有“羊城”、“穗城”的美稱,“五羊”也成為廣州的象征。廣州既是中國也是世界名城,又是一座古城,因歷史上有五羊仙子降臨獻(xiàn)稻穗的故事,廣州又稱為“羊城”和“穗城”,簡稱“穗”;廣州一年四季如春、繁花似錦,除夕迎春花市聞名海內(nèi)外,故又有“花城”的美譽。廣州地處低緯,屬南亞熱帶季風(fēng)氣候區(qū)。地表接受太陽輻射量較多,同時受季風(fēng)的影響,夏季海洋暖氣流形成高溫、高濕、多雨的氣候;冬季北方大陸冷風(fēng)形成低溫、干燥、少雨的氣候。年平均氣溫為21.4-21.9度,年降雨量平均為1623.6-1899.8mm,北部多于南部。1982年,廣州被國務(wù)院選定為全國首批歷史文化名城之一,是我國重點旅游城市。1999年1月,廣州被評為優(yōu)秀旅游城市。景觀:白云山、蓮花山、南海神廟、佛山祖廟、廣州動物園等。79 </string>80 </ArrayOfString>
JSON 數(shù)據(jù)格式:
請求網(wǎng)址:https://alpha-api.app.net/stream/0/posts/stream/global
1 { 2 "data": [ 3 { 4 "canonical_url": "https://alpha.app.net/hasskod2013/post/64791677", 5 "created_at": "2015-09-19T11:23:30Z", 6 "entities": { 7 "hashtags": [ 8 ], 9 "links": [10 {11 "len": 21,12 "pos": 163,13 "text": "http://bit.ly/1Ynt5DC",14 "url": "http://bit.ly/1Ynt5DC"15 }16 ],17 "mentions": [18 ]19 },20 "html": "<span itemscope=/"https://app.net/schemas/Post/">Oman says ambassador's home hit in Yemen: Foreign ministry condemns incident in Sanaa as Arab coalition bombards Houthi-held sites as part of move to retake city. <a href=/"http://bit.ly/1Ynt5DC/">http://bit.ly/1Ynt5DC</a></span>",21 "id": "64791677",22 "machine_only": false,23 "num_replies": 0,24 "num_reposts": 0,25 "num_stars": 0,26 "pagination_id": "64791677",27 "source": {28 "client_id": "8dWzbxxwZeTTAH3v7Yy9TbJ82W6mexqH",29 "link": "http://twitterfeed.com",30 "name": "twitterfeed"31 },32 "text": "Oman says ambassador's home hit in Yemen: Foreign ministry condemns incident in Sanaa as Arab coalition bombards Houthi-held sites as part of move to retake city. http://bit.ly/1Ynt5DC",33 "thread_id": "64791677",34 "user": {35 "avatar_image": {36 "height": 80,37 "is_default": false,38 "url": "https://d2rfichhc2fb9n.cloudfront.net/image/5/8crtOD1QaZ4b0uA6GnTQQMVTgJJ7InMiOiJzMyIsImIiOiJhZG4tdXNlci1hc3NldHMiLCJrIjoiYXNzZXRzL3VzZXIvMjMvZmIvNTAvMjNmYjUwMDAwMDAwMDAwMC5wbmciLCJvIjoiIn0",39 "width": 8040 },41 "canonical_url": "https://alpha.app.net/hasskod2013",42 "counts": {43 "followers": 16,44 "following": 33,45 "posts": 11722,46 "stars": 047 },48 "cover_image": {49 "height": 260,50 "is_default": true,51 "url": "https://d2rfichhc2fb9n.cloudfront.net/image/5/kZ-JRmTbmd3WVPswTJ8Nwxzkf917InMiOiJzMyIsImIiOiJ0YXBwLWFzc2V0cyIsImsiOiJpL1UvaS9ZL1VpWW5xRFNvTUtyTEhLNXA0OHN2NkxmTmRVMC5qcGciLCJvIjoiIn0",52 "width": 96053 },54 "created_at": "2013-08-28T11:18:40Z",55 "id": "155975",56 "locale": "ar_AA",57 "name": "hasskod",58 "timezone": "Asia/Baghdad",59 "type": "feed",60 "username": "hasskod2013"61 }62 },63 //同樣格式的19個數(shù)組元素內(nèi)容,這里省略...64 ],65 "meta": {66 "code": 200,67 "max_id": "64791677",68 "min_id": "64791658",69 "more": true70 }71 }
ViewController.h
1 #import <UIKit/UIKit.h>2 3 @interface ViewController : UITableViewController4 @property (copy, nonatomic) NSArray *arrSampleName;5 6 - (instancetype)initWithSampleNameArray:(NSArray *)arrSampleName;7 8 @end
ViewController.m
1 #import "ViewController.h" 2 #import "XMLRequestViewController.h" 3 #import "JSONRequestViewController.h" 4 5 @interface ViewController () 6 - (void)layoutUI; 7 @end 8 9 @implementation ViewController10 - (void)viewDidLoad {11 [super viewDidLoad];12 13 [self layoutUI];14 }15 16 - (void)didReceiveMemoryWarning {17 [super didReceiveMemoryWarning];18 // Dispose of any resources that can be recreated.19 }20 21 - (instancetype)initWithSampleNameArray:(NSArray *)arrSampleName {22 if (self = [super initWithStyle:UITableViewStyleGrouped]) {23 self.navigationItem.title = @"使用 AFNetworking 進(jìn)行數(shù)據(jù)請求";24 self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"返回" style:UIBarButtonItemStylePlain target:nil action:nil];25 26 _arrSampleName = arrSampleName;27 }28 return self;29 }30 31 - (void)layoutUI {32 33 }34 35 #pragma mark - UITableViewController相關(guān)方法重寫36 - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {37 return 0.1;38 }39 40 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {41 return 1;42 }43 44 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {45 return [_arrSampleName count];46 }47 48 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {49 static NSString *cellIdentifier = @"cell";50 UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];51 if (!cell) {52 cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];53 }54 cell.textLabel.text = _arrSampleName[indexPath.row];55 return cell;56 }57 58 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {59 switch (indexPath.row) {60 case 0: {61 XMLRequestViewController *XMLRequestVC = [XMLRequestViewController new];62 [self.navigationController pushViewController:XMLRequestVC animated:YES];63 break;64 }65 case 1: {66 JSONRequestViewController *JSONRequestVC = [JSONRequestViewController new];67 [self.navigationController pushViewController:JSONRequestVC animated:YES];68 break;69 70 /*71 類似堆棧的先進(jìn)后出的原理:72 返回到(上一級)、(任意級)、(根級)導(dǎo)航73 [self.navigationController popViewControllerAnimated:YES];74 [self.navigationController popToViewController:thirdSampleVC animated:YES];75 [self.navigationController popToRootViewControllerAnimated:YES];76 */77 }78 default:79 break;80 }81 }82 83 @end
PrefixHeader.pch
1 #define kXMLRequestURLStr @"http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getWeatherbyCityName?theCityName=59287" 2 #define kJSONRequestURLStr @"https://alpha-api.app.net/stream/0/posts/stream/global" 3 4 #define kTitleOfXMLRequest @"XML 數(shù)據(jù)請求" 5 #define kTitleOfJSONRequest @"JSON 數(shù)據(jù)請求" 6 7 #define kAvatarImageStr @"avatarImageStr" 8 #define kName @"name" 9 #define kText @"text"10 #define kLink @"link"11 #define kCreatedAt @"createdAt"12 13 #define kapplication [UIApplication sharedApplication]
UIButton+BeautifulButton.h
1 #import <UIKit/UIKit.h> 2 3 @interface UIButton (BeautifulButton) 4 /** 5 * 根據(jù)按鈕文字顏色,返回對應(yīng)文字顏色的圓角按鈕 6 * 7 * @param tintColor 按鈕文字顏色;nil 的話就為深灰色 8 */ 9 - (void)beautifulButton:(UIColor *)tintColor;10 11 @end
UIButton+BeautifulButton.m
1 #import "UIButton+BeautifulButton.h" 2 3 @implementation UIButton (BeautifulButton) 4 5 - (void)beautifulButton:(UIColor *)tintColor { 6 self.tintColor = tintColor ?: [UIColor darkGrayColor]; 7 self.layer.masksToBounds = YES; 8 self.layer.cornerRadius = 10.0; 9 self.layer.borderColor = [UIColor grayColor].CGColor;10 self.layer.borderWidth = 1.0;11 }12 13 @end
NSString+OpenURL.h
1 #import <UIKit/UIKit.h> 2 3 @interface NSString (OpenURL) 4 /** 5 * 打開瀏覽器 6 */ 7 - (void)openByBrowser; 8 9 /**10 * 打開郵件11 */12 - (void)openByEmail;13 14 /**15 * 撥打電話16 */17 - (void)openByTelephone;18 19 /**20 * 打開短信(Short Messaging Service)21 */22 - (void)openBySMS;23 24 @end
NSString+OpenURL.m
1 #import "NSString+OpenURL.h" 2 3 @implementation NSString (OpenURL) 4 5 + (void)open:(NSString *)openURLStr { 6 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:openURLStr]]; 7 } 8 9 - (void)openByBrowser {10 [NSString open:self];11 }12 13 - (void)openByEmail {14 [NSString open:[NSString stringWithFormat:@"mailto://%@", self]];15 }16 17 - (void)openByTelephone {18 [NSString open:[NSString stringWithFormat:@"tel://%@", self]];19 }20 21 - (void)openBySMS {22 [NSString open:[NSString stringWithFormat:@"sms://%@", self]];23 }24 25 @end
KMTableViewCell.h
1 #import <UIKit/UIKit.h> 2 3 @interface KMTableViewCell : UITableViewCell 4 @property (strong, nonatomic) IBOutlet UIImageView *imgVAvatarImage; 5 @property (strong, nonatomic) IBOutlet UILabel *lblName; 6 @property (strong, nonatomic) IBOutlet UILabel *lblCreatedAt; 7 @property (strong, nonatomic) IBOutlet UIImageView *imgVLink; 8 9 @property (strong, nonatomic) UILabel *lblText;10 @property (copy, nonatomic) NSString *avatarImageStr;11 @property (copy, nonatomic) NSString *name;12 @property (copy, nonatomic) NSString *text;13 @property (copy, nonatomic) NSString *createdAt;14 @property (assign, nonatomic, getter=isHaveLink) BOOL haveLink;15 16 @end
KMTableViewCell.m
1 #import "KMTableViewCell.h" 2 //#import "UIImageView+AFNetworking.h" 3 #import "UIImageView+WebCache.h" 4 5 static UIImage *placeholderImage; 6 static CGFloat widthOfLabel; 7 @implementation KMTableViewCell 8 9 - (void)awakeFromNib {10 // Initialization code11 static dispatch_once_t onceToken;12 dispatch_once(&onceToken, ^{13 placeholderImage = [UIImage imageNamed:@"JSON"];14 widthOfLabel = [[UIScreen mainScreen] bounds].size.width - 100.0;15 });16 17 _imgVAvatarImage.layer.masksToBounds = YES;18 _imgVAvatarImage.layer.cornerRadius = 10.0;19 20 //由于 xib 中對標(biāo)簽自適應(yīng)寬度找不到合適的方式來控制,所以這里用代碼編寫;這里屏幕復(fù)用的 Cell 有幾個,就會執(zhí)行幾次 awakeFromNib 方法21 _lblText = [[UILabel alloc] initWithFrame:CGRectMake(90.0, 23.0, widthOfLabel, 42.0)];22 _lblText.numberOfLines = 2;23 _lblText.font = [UIFont systemFontOfSize:12.0];24 [self addSubview:_lblText];25 }26 27 - (void)setSelected:(BOOL)selected animated:(BOOL)animated {28 [super setSelected:selected animated:animated];29 30 // Configure the view for the selected state31 }32 33 - (void)setAvatarImageStr:(NSString *)avatarImageStr {34 if (![_avatarImageStr isEqualToString:avatarImageStr]) {35 _avatarImageStr = [avatarImageStr copy];36 NSURL *avatarImageURL = [NSURL URLWithString:_avatarImageStr];37 //NSData *avatarImageData = [NSData dataWithContentsOfURL:avatarImageURL];38 //_imgVAvatarImage.image = [UIImage imageWithData:avatarImageData];39 40 //圖片緩存;性能優(yōu)化的第一步41 //方法一:AFNetworking 框架:UIImageView+AFNetworking42 // [_imgVAvatarImage setImageWithURL:avatarImageURL43 // placeholderImage:placeholderImage];44 45 //方法二:SDWebImage 框架:UIImageView+WebCache46 [_imgVAvatarImage sd_setImageWithURL:avatarImageURL47 placeholderImage:placeholderImage];48 }49 }50 51 - (void)setName:(NSString *)name {52 _name = [name copy];53 _lblName.text = _name;54 }55 56 - (void)setText:(NSString *)text {57 _text = [text copy];58 _lblText.text = _text;59 }60 61 - (void)setCreatedAt:(NSString *)createdAt {62 _createdAt = [createdAt copy];63 _lblCreatedAt.text = _createdAt;64 }65 66 - (void)setHaveLink:(BOOL)haveLink {67 _haveLink = haveLink;68 _imgVLink.hidden = !_haveLink;69 }70 71 @end
KMTableViewCell.xib
1 <?xml version="1.0" encoding="UTF-8" standalone="no"?> 2 <document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="7706" systemVersion="14E46" targetRuntime="iOS.CocoaTouch" propertyaccessControl="none" useAutolayout="YES" useTraitCollections="YES"> 3 <dependencies> 4 <deployment identifier="iOS"/> 5 <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="7703"/> 6 </dependencies> 7 <objects> 8 <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/> 9 <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>10 <tableViewCell contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="cellIdentifier" rowHeight="101" id="KGk-i7-Jjw" customClass="KMTableViewCell">11 <rect key="frame" x="0.0" y="0.0" width="375" height="101"/>12 <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>13 <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="KGk-i7-Jjw" id="H2p-sc-9uM">14 <rect key="frame" x="0.0" y="0.0" width="320" height="43"/>15 <autoresizingMask key="autoresizingMask"/>16 <subviews>17 <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="3Br-R7-YsD">18 <rect key="frame" x="0.0" y="5" width="80" height="80"/>19 </imageView>20 <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="name" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="kPR-pa-8uG">21 <rect key="frame" x="90" y="2" width="230" height="21"/>22 <fontDescription key="fontDescription" type="boldSystem" pointSize="14"/>23 <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>24 <nil key="highlightedColor"/>25 </label>26 <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="created_at" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="iAH-dO-aus">27 <rect key="frame" x="90" y="64" width="130" height="21"/>28 <fontDescription key="fontDescription" type="system" pointSize="12"/>29 <color key="textColor" red="0.40000000596046448" green="0.40000000596046448" blue="0.40000000596046448" alpha="1" colorSpace="calibratedRGB"/>30 <nil key="highlightedColor"/>31 </label>32 <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" image="Action_ReadOriginal" translatesAutoresizingMaskIntoConstraints="NO" id="By5-cw-IJd">33 <rect key="frame" x="223" y="60" width="30" height="30"/>34 </imageView>35 </subviews>36 </tableViewCellContentView>37 <connections>38 <outlet property="imgVAvatarImage" destination="3Br-R7-YsD" id="KaV-vS-y5p"/>39 <outlet property="imgVLink" destination="By5-cw-IJd" id="wrr-zz-EqH"/>40 <outlet property="lblCreatedAt" destination="iAH-dO-aus" id="BNF-es-fb1"/>41 <outlet property="lblName" destination="kPR-pa-8uG" id="BH7-oj-3Kx"/>42 </connections>43 <point key="canvasLocation" x="254.5" y="377.5"/>44 </tableViewCell>45 </objects>46 <resources>47 <image name="Action_ReadOriginal" width="60" height="60"/>48 </resources>49 </document>
XMLRequestViewController.h
1 #import <UIKit/UIKit.h>2 3 @interface XMLRequestViewController : UIViewController <NSXMLParserDelegate>4 @property (strong, nonatomic) UITextView *txtVResult;5 6 @property (strong, nonatomic) IBOutlet UIButton *btnSendRequest;7 8 @end
XMLRequestViewController.m
1 #import "XMLRequestViewController.h" 2 #import "AFNetworking.h" 3 #import "AFNetworkActivityIndicatorManager.h" 4 #import "UIButton+BeautifulButton.h" 5 #import "XMLDictionary.h" 6 7 @interface XMLRequestViewController () 8 - (void)layoutUI; 9 - (void)convertXMLParserToDictionary:(NSXMLParser *)parser; 10 @end 11 12 @implementation XMLRequestViewController 13 14 - (void)viewDidLoad { 15 [super viewDidLoad]; 16 17 [self layoutUI]; 18 } 19 20 - (void)didReceiveMemoryWarning { 21 [super didReceiveMemoryWarning]; 22 // Dispose of any resources that can be recreated. 23 } 24 25 - (void)layoutUI { 26 self.navigationItem.title = kTitleOfXMLRequest; 27 28 [_btnSendRequest beautifulButton:nil]; 29 30 _txtVResult = [UITextView new]; 31 _txtVResult.editable = NO; 32 CGRect rect = [[UIScreen mainScreen] bounds]; 33 _txtVResult.frame = CGRectMake(5.0, 64.0, rect.size.width - 10.0, rect.size.height - 164.0); 34 _txtVResult.font = [UIFont systemFontOfSize:15.0]; 35 _txtVResult.text = @"點擊「發(fā)送請求」按鈕獲取天氣信息"; 36 [self.view addSubview:_txtVResult]; 37 38 //啟動網(wǎng)絡(luò)活動指示器;會根據(jù)網(wǎng)絡(luò)交互情況,實時顯示或隱藏網(wǎng)絡(luò)活動指示器;他通過「通知與消息機(jī)制」來實現(xiàn) [UIApplication sharedApplication].networkActivityIndicatorVisible 的控制 39 [AFNetworkActivityIndicatorManager sharedManager].enabled = YES; 40 } 41 42 - (void)convertXMLParserToDictionary:(NSXMLParser *)parser { 43 //dictionaryWithXMLParser: 是第三方框架 XMLDictionary 的方法 44 NSDictionary *dic = [NSDictionary dictionaryWithXMLParser:parser]; 45 NSMutableString *mStrWeatherInfo = [[NSMutableString alloc] initWithString:@"廣州近三天天氣情況:/n"]; 46 NSArray *arrWeatherInfo = [dic objectForKey:@"string"]; 47 if (arrWeatherInfo != nil && arrWeatherInfo.count > 22) { 48 NSMutableArray *mArrRange = [[NSMutableArray alloc] init]; 49 50 NSUInteger loc = mStrWeatherInfo.length; 51 [mStrWeatherInfo appendFormat:@"/n %@", arrWeatherInfo[6]]; 52 NSUInteger len = mStrWeatherInfo.length - loc; 53 NSValue *valObj = [NSValue valueWithRange:NSMakeRange(loc, len)]; 54 [mArrRange addObject:valObj]; 55 [mStrWeatherInfo appendFormat:@"/n %@", arrWeatherInfo[5]]; 56 [mStrWeatherInfo appendFormat:@"/n %@", arrWeatherInfo[7]]; 57 [mStrWeatherInfo appendFormat:@"/n %@", arrWeatherInfo[10]]; 58 59 loc = mStrWeatherInfo.length; 60 [mStrWeatherInfo appendFormat:@"/n/n %@", arrWeatherInfo[13]]; 61 len = mStrWeatherInfo.length - loc; 62 valObj = [NSValue valueWithRange:NSMakeRange(loc, len)]; 63 [mArrRange addObject:valObj]; 64 [mStrWeatherInfo appendFormat:@"/n %@", arrWeatherInfo[12]]; 65 [mStrWeatherInfo appendFormat:@"/n %@", arrWeatherInfo[14]]; 66 67 loc = mStrWeatherInfo.length; 68 [mStrWeatherInfo appendFormat:@"/n/n %@", arrWeatherInfo[18]]; 69 len = mStrWeatherInfo.length - loc; 70 valObj = [NSValue valueWithRange:NSMakeRange(loc, len)]; 71 [mArrRange addObject:valObj]; 72 [mStrWeatherInfo appendFormat:@"/n %@", arrWeatherInfo[17]]; 73 [mStrWeatherInfo appendFormat:@"/n %@", arrWeatherInfo[19]]; 74 75 [mStrWeatherInfo appendFormat:@"/n/n %@", arrWeatherInfo[22]]; 76 77 //數(shù)據(jù)的前10個字符以16.0像素加粗顯示;這里使用 UITextView 的 attributedText,而他的 text 無法實現(xiàn)這種需求 78 NSMutableAttributedString *mAttrStr = [[NSMutableAttributedString alloc] initWithString:mStrWeatherInfo]; 79 [mAttrStr addAttribute:NSFontAttributeName 80 value:[UIFont boldSystemFontOfSize:16.0] 81 range:NSMakeRange(0, 10)]; 82 83 //數(shù)據(jù)的日期部分以紫色顯示 84 for (NSValue *valObj in mArrRange) { 85 NSRange currentRange; 86 [valObj getValue:¤tRange]; 87 [mAttrStr addAttribute:NSForegroundColorAttributeName 88 value:[UIColor purpleColor] 89 range:currentRange]; 90 } 91 92 //數(shù)據(jù)的前10個字符之后的內(nèi)容全部以15.0像素顯示 93 [mAttrStr addAttribute:NSFontAttributeName 94 value:[UIFont systemFontOfSize:15.0] 95 range:NSMakeRange(10, mStrWeatherInfo.length - 10)]; 96 97 _txtVResult.attributedText = mAttrStr; 98 } else { 99 _txtVResult.text = @"請求數(shù)據(jù)無效";100 }101 102 }103 104 - (IBAction)sendRequest:(id)sender {105 NSURL *requestURL = [NSURL URLWithString:kXMLRequestURLStr];106 NSURLRequest *request = [NSURLRequest requestWithURL:requestURL];107 AFHTTPRequestOperation *op = [[AFHTTPRequestOperation alloc] initWithRequest:request];108 op.responseSerializer = [AFXMLParserResponseSerializer serializer];109 [op setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responSEObject) {110 NSLog(@"JSON: %@", responseObject);111 NSXMLParser *parser = (NSXMLParser *)responseObject;112 //這里使用了第三方框架 XMLDictionary,他本身繼承并實現(xiàn) NSXMLParserDelegate 委托代理協(xié)議,對數(shù)據(jù)進(jìn)行遍歷處理113 [self convertXMLParserToDictionary:parser];114 115 //parser.delegate = self;116 //parser.shouldProcessNamespaces = YES;117 //[parser parse];118 } failure:^(AFHTTPRequestOperation *operation, NSError *error) {119 NSLog(@"Error: %@", error);120 }];121 //start 是 AFNetworking 的自定義方法,他在自定義的線程中去執(zhí)行操作;不是 NSOperation 對象實例的 start 方法,所以可以不用使用把操作添加到操作主隊列的方法:[[NSOperationQueue mainQueue] addOperation:op]122 [op start];123 }124 125 126 #pragma mark -127 #pragma mark NSXMLParserDelegate128 /* 開始解析 XML 文件,在開始解析 XML 節(jié)點前,通過該方法可以做一些初始化工作 */129 - (void)parserDidStartDocument:(NSXMLParser *)parser {130 NSLog(@"開始解析 XML 文件");131 }132 133 /* 當(dāng)解析器對象遇到 XML 的開始標(biāo)記時,調(diào)用這個方法開始解析該節(jié)點 */134 - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName135 attributes:(NSDictionary *)attributeDict {136 NSLog(@"發(fā)現(xiàn)節(jié)點:%@", elementName);137 }138 139 /* 當(dāng)解析器找到開始標(biāo)記和結(jié)束標(biāo)記之間的字符時,調(diào)用這個方法解析當(dāng)前節(jié)點的所有字符 */140 - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {141 NSLog(@"正在解析節(jié)點內(nèi)容:%@", string);142 }143 144 /* 當(dāng)解析器對象遇到 XML 的結(jié)束標(biāo)記時,調(diào)用這個方法完成解析該節(jié)點 */145 - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {146 NSLog(@"解析節(jié)點結(jié)束:%@", elementName);147 }148 149 /* 解析 XML 出錯的處理方法 */150 - (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError {151 NSLog(@"解析 XML 出錯:%@", parseError);152 }153 154 /* 解析 XML 文件結(jié)束 */155 - (void)parserDidEndDocument:(NSXMLParser *)parser {156 NSLog(@"解析 XML 文件結(jié)束");157 }158 159 @end
XMLRequestViewController.xib
1 <?xml version="1.0" encoding="UTF-8" standalone="no"?> 2 <document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="7706" systemVersion="14E46" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES"> 3 <dependencies> 4 <deployment identifier="iOS"/> 5 <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="7703"/> 6 </dependencies> 7 <objects> 8 <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="XMLRequestViewController"> 9 <connections>10 <outlet property="btnSendRequest" destination="zCQ-LM-grx" id="tgt-2z-WaB"/>11 <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/>12 </connections>13 </placeholder>14 <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>15 <view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT">16 <rect key="frame" x="0.0" y="0.0" width="600" height="600"/>17 <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>18 <subviews>19 <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="zCQ-LM-grx">20 <rect key="frame" x="250" y="520" width="100" height="40"/>21 <constraints>22 <constraint firstAttribute="width" constant="100" id="V3R-30-5vV"/>23 <constraint firstAttribute="height" constant="40" id="yct-84-Mk4"/>24 </constraints>25 <state key="normal" title="發(fā)送請求">26 <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>27 </state>28 <connections>29 <action selector="sendRequest:" destination="-1" eventType="touchUpInside" id="8zG-Dl-erk"/>30 </connections>31 </button>32 </subviews>33 <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>34 <constraints>35 <constraint firstAttribute="bottom" secondItem="zCQ-LM-grx" secondAttribute="bottom" constant="40" id="DBx-zw-hdG"/>36 <constraint firstAttribute="centerX" secondItem="zCQ-LM-grx" secondAttribute="centerX" id="F2b-L7-BR9"/>37 </constraints>38 </view>39 </objects>40 </document>
JSONRequestViewController.h
1 #import <UIKit/UIKit.h> 2 3 @interface JSONRequestViewController : UIViewController <UITableViewDataSource, UITableViewDelegate, UIWebViewDelegate> 4 @property (strong, nonatomic) NSMutableArray *mArrCell; 5 @property (strong, nonatomic) UITableView *tableView; 6 @property (strong, nonatomic) UILabel *lblEmptyDataMsg; 7 @property (strong, nonatomic) UIWebView *webView; 8 9 @property (strong, nonatomic) IBOutlet UIButton *btnSendRequest;10 11 @end
JSONRequestViewController.m
1 #import "JSONRequestViewController.h" 2 #import "AFNetworking.h" 3 #import "AFNetworkActivityIndicatorManager.h" 4 #import "UIButton+BeautifulButton.h" 5 #import "KMTableViewCell.h" 6 #import "NSString+OpenURL.h" 7 8 static NSString *cellIdentifier = @"cellIdentifier"; 9 @interface JSONRequestViewController () 10 - (void)layoutUI; 11 - (NSString *)displayTimeFromCreatedAt:(NSString *)createdAt; 12 - (void)loadData:(NSArray *)arrData; 13 @end 14 15 @implementation JSONRequestViewController 16 17 - (void)viewDidLoad { 18 [super viewDidLoad]; 19 20 [self layoutUI]; 21 } 22 23 - (void)didReceiveMemoryWarning { 24 [super didReceiveMemoryWarning]; 25 // Dispose of any resources that can be recreated. 26 } 27 28 - (void)layoutUI { 29 self.navigationItem.title = kTitleOfJSONRequest; 30 31 [_btnSendRequest beautifulButton:nil]; 32 33 _mArrCell = [[NSMutableArray alloc] initWithCapacity:0]; 34 35 CGRect rect = [[UIScreen mainScreen] bounds]; 36 CGRect frame = CGRectMake(5.0, 64.0, rect.size.width - 10.0, rect.size.height - 164.0); 37 _tableView =[[UITableView alloc] initWithFrame:frame style:UITableViewStylePlain]; 38 _tableView.dataSource = self; 39 _tableView.delegate = self; 40 //設(shè)置邊距,解決單元格分割線默認(rèn)偏移像素過多的問題 41 if ([_tableView respondsToSelector:@selector(setSeparatorInset:)]) { 42 [_tableView setSeparatorInset:UIEdgeInsetsZero]; //設(shè)置單元格(上左下右)內(nèi)邊距 43 } 44 if ([_tableView respondsToSelector:@selector(setLayoutMargins:)]) { 45 [_tableView setLayoutMargins:UIEdgeInsetsZero]; //設(shè)置單元格(上左下右)外邊距 46 } 47 [self.view addSubview:_tableView]; 48 49 //注冊可復(fù)用的單元格 50 UINib *nib = [UINib nibWithNibName:@"KMTableViewCell" bundle:nil]; 51 [_tableView registerNib:nib forCellReuseIdentifier:cellIdentifier]; 52 53 //空數(shù)據(jù)時,顯示的提示內(nèi)容 54 _lblEmptyDataMsg = [[UILabel alloc] initWithFrame:CGRectMake(0.0, 0.0, 300.0, 50.0)]; 55 CGPoint newPoint = _tableView.center; 56 newPoint.y -= 45.0; 57 _lblEmptyDataMsg.center = newPoint; 58 _lblEmptyDataMsg.text = @"點擊「發(fā)送請求」按鈕獲取全球新聞信息"; 59 _lblEmptyDataMsg.textColor = [UIColor grayColor]; 60 _lblEmptyDataMsg.textAlignment = NSTextAlignmentCenter; 61 _lblEmptyDataMsg.font = [UIFont systemFontOfSize:16.0]; 62 [_tableView addSubview:_lblEmptyDataMsg]; 63 64 //點擊單元格時,顯示的新聞信息詳細(xì)內(nèi)容 65 frame = CGRectMake(10.0, CGRectGetMidY(rect) - 200.0, rect.size.width - 20.0, 400.0); 66 _webView = [[UIWebView alloc] initWithFrame:frame]; 67 _webView.layer.borderColor = [UIColor lightGrayColor].CGColor; 68 _webView.layer.borderWidth = 1.0; 69 _webView.delegate = self; 70 _webView.hidden = YES; 71 [self.view addSubview:_webView]; 72 73 [AFNetworkActivityIndicatorManager sharedManager].enabled = YES; 74 } 75 76 - (NSString *)displayTimeFromCreatedAt:(NSString *)createdAt { 77 NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 78 [dateFormat setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss'Z'"]; //「2015-09-15T13:23:28Z」 79 NSDate *date = [dateFormat dateFromString:createdAt]; 80 81 NSTimeZone *zone = [NSTimeZone systemTimeZone]; 82 NSInteger interval = [zone secondsFromGMTForDate:date]; //跟 GMT 時間相差8小時 83 date = [date dateByAddingTimeInterval:interval]; 84 [dateFormat setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; //轉(zhuǎn)化為「2015-09-15 21:23:28」 85 NSString *displayTime = [dateFormat stringFromDate:date]; 86 return displayTime; 87 } 88 89 - (void)loadData:(NSArray *)arrData { 90 _mArrCell = [NSMutableArray new]; 91 [arrData enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 92 NSMutableDictionary *mDicCell = [NSMutableDictionary new]; 93 NSDictionary *dicRoot = (NSDictionary *)obj; 94 NSArray *arrLink = [dicRoot valueForKeyPath:@"entities.links"]; 95 [mDicCell setValue:[NSString stringWithFormat:@"%@?w=80&h=80", 96 [dicRoot valueForKeyPath:@"user.avatar_image.url"]] 97 forKey:kAvatarImageStr]; 98 [mDicCell setValue:[dicRoot valueForKeyPath:@"user.name"] forKey:kName]; 99 [mDicCell setValue:[dicRoot valueForKey:@"text"] forKey:kText];100 [mDicCell setValue:(arrLink.count > 0 ? [arrLink[0] valueForKey:@"url"] : @"")101 forKey:kLink];102 [mDicCell setValue:[self displayTimeFromCreatedAt:[dicRoot valueForKey:@"created_at"]]103 forKey:kCreatedAt];104 [_mArrCell addObject:mDicCell];105 }];106 [self.tableView reloadData];107 }108 109 - (IBAction)sendRequest:(id)sender {110 _lblEmptyDataMsg.text = @"加載中...";111 _webView.hidden = YES;112 113 //方法一:AFHTTPRequestOperation114 // NSURL *requestURL = [NSURL URLWithString:kJSONRequestURLStr];115 // NSURLRequest *request = [NSURLRequest requestWithURL:requestURL];116 // AFHTTPRequestOperation *op = [[AFHTTPRequestOperation alloc] initWithRequest:request];117 // op.responseSerializer = [AFJSONResponseSerializer serializer];118 // [op setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {119 // NSDictionary *dic = (NSDictionary *)responseObject;120 // [self loadData:(NSArray *)dic[@"data"]];121 // } failure:^(AFHTTPRequestOperation *operation, NSError *error) {122 // NSLog(@"Error: %@", error);123 // }];124 // //start 是 AFNetworking 的自定義方法,他在自定義的線程中去執(zhí)行操作;不是 NSOperation 對象實例的 start 方法,所以可以不用使用把操作添加到操作主隊列的方法:[[NSOperationQueue mainQueue] addOperation:op]125 // [op start];126 127 //方法二:AFHTTPRequestOperationManager128 AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];129 [manager GET:kJSONRequestURLStr parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {130 NSDictionary *dic = (NSDictionary *)responseObject;131 [self loadData:(NSArray *)dic[@"data"]];132 } failure:^(AFHTTPRequestOperation *operation, NSError *error) {133 NSLog(@"Error: %@", error);134 }];135 }136 137 - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {138 _webView.hidden = YES;139 }140 141 #pragma mark - TableView142 - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {143 return @"全球新聞信息列表";144 }145 146 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {147 return 1;148 }149 150 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {151 NSUInteger count = _mArrCell.count;152 _lblEmptyDataMsg.hidden = count > 0;153 154 return count;155 }156 157 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {158 KMTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];159 if (!cell) {160 cell = [[KMTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault161 reuseIdentifier:cellIdentifier];162 }163 164 NSMutableDictionary *mDicCell = _mArrCell[indexPath.row];165 cell.avatarImageStr = mDicCell[kAvatarImageStr];166 cell.name = mDicCell[kName];167 cell.text = mDicCell[kText];168 cell.createdAt = mDicCell[kCreatedAt];169 cell.haveLink = [mDicCell[kLink] length] > 0; //可以通過 isHaveLink 或 haveLink 獲取值170 return cell;171 }172 173 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {174 return 90.0;175 }176 177 - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {178 /*179 viewDidLoad 中對應(yīng)的操作180 if ([_tableView respondsToSelector:@selector(setSeparatorInset:)]) {181 [_tableView setSeparatorInset:UIEdgeInsetsZero]; //設(shè)置單元格(上左下右)內(nèi)邊距182 }183 if ([_tableView respondsToSelector:@selector(setLayoutMargins:)]) {184 [_tableView setLayoutMargins:UIEdgeInsetsZero]; //設(shè)置單元格(上左下右)外邊距185 }186 */187 188 if ([cell respondsToSelector:@selector(setSeparatorInset:)]) {189 [cell setSeparatorInset:UIEdgeInsetsZero];190 }191 if ([cell respondsToSelector:@selector(setLayoutMargins:)]) {192 [cell setLayoutMargins:UIEdgeInsetsZero];193 }194 }195 196 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {197 NSMutableDictionary *mDicCell = _mArrCell[indexPath.row];198 NSString *link = mDicCell[kLink];199 if (link.length > 0) {200 //使用瀏覽器打開網(wǎng)址201 //[link openByBrowser];202 203 //使用 WebView 打開網(wǎng)址;由于這里很多網(wǎng)址是外國的,存在有的訪問不了、有的訪問慢導(dǎo)致加載超時的情況204 NSURLRequest *request = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:link]];205 [_webView loadRequest:request];206 _webView.hidden = NO;207 }208 }209 210 #pragma mark - WebView211 - (void)webViewDidStartLoad:(UIWebView *)webView {212 kApplication.networkActivityIndicatorVisible = YES;213 }214 215 - (void)webViewDidFinishLoad:(UIWebView *)webView {216 kApplication.networkActivityIndicatorVisible = NO;217 }218 219 - (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error {220 NSLog(@"Error: %@", error);221 webView.hidden = YES;222 kApplication.networkActivityIndicatorVisible = NO;223 UIAlertView *alertVCustom = [[UIAlertView alloc] initWithTitle:@"提示信息"224 message:@"網(wǎng)絡(luò)連接錯誤"225 delegate:nil226 cancelButtonTitle:@"確定"227 otherButtonTitles:nil, nil];228 [alertVCustom show];229 }230 231 @end
JSONRequestViewController.xib
1 <?xml version="1.0" encoding="UTF-8" standalone="no"?> 2 <document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="7706" systemVersion="14E46" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES"> 3 <dependencies> 4 <deployment identifier="iOS"/> 5 <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="7703"/> 6 </dependencies> 7 <objects> 8 <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="JSONRequestViewController"> 9 <connections>10 <outlet property="btnSendRequest" destination="zCQ-LM-grx" id="tgt-2z-WaB"/>11 <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/>12 </connections>13 </placeholder>14 <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>15 <view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT">16 <rect key="frame" x="0.0" y="0.0" width="600" height="600"/>17 <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>18 <subviews>19 <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="zCQ-LM-grx">20 <rect key="frame" x="250" y="520" width="100" height="40"/>21 <constraints>22 <constraint firstAttribute="width" constant="100" id="V3R-30-5vV"/>23 <constraint firstAttribute="height" constant="40" id="yct-84-Mk4"/>24 </constraints>25 <state key="normal" title="發(fā)送請求">26 <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>27 </state>28 <connections>29 <action selector="sendRequest:" destination="-1" eventType="touchUpInside" id="8zG-Dl-erk"/>30 </connections>31 </button>32 </subviews>33 <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>34 <constraints>35 <constraint firstAttribute="bottom" secondItem="zCQ-LM-grx" secondAttribute="bottom" constant="40" id="DBx-zw-hdG"/>36 <constraint firstAttribute="centerX" secondItem="zCQ-LM-grx" secondAttribute="centerX" id="F2b-L7-BR9"/>37 </constraints>38 </view>39 </objects>40 </document>
AppDelegate.h
1 #import <UIKit/UIKit.h>2 3 @interface AppDelegate : UIResponder <UIApplicationDelegate>4 5 @property (strong, nonatomic) UIWindow *window;6 @property (strong, nonatomic) UINavigationController *navigationController;7 8 @end
AppDelegate.m
1 #import "AppDelegate.h" 2 #import "ViewController.h" 3 4 @interface AppDelegate () 5 6 @end 7 8 @implementation AppDelegate 9 10 11 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {12 _window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];13 ViewController *viewController = [[ViewController alloc]14 initWithSampleNameArray:@[ kTitleOfXMLRequest,15 kTitleOfJSONRequest ]];16 _navigationController = [[UINavigationController alloc] initWithRootViewController:viewController];17 _window.rootViewController = _navigationController;18 //[_window addSubview:_navigationController.view]; //當(dāng)_window.rootViewController關(guān)聯(lián)時,這一句可有可無19 [_window makeKeyAndVisible];20 return YES;21 }22 23 - (void)applicationWillResignActive:(UIApplication *)application {24 }25 26 - (void)applicationDidEnterBackground:(UIApplication *)application {27 }28 29 - (void)applicationWillEnterForeground:(UIApplication *)application {30 }31 32 - (void)applicationDidBecomeActive:(UIApplication *)application {33 }34 35 - (void)applicationWillTerminate:(UIApplication *)application {36 }37 38 @end
新聞熱點
疑難解答