JSON 과 XML 방법 으로 도시 의 날씨 상황 을 분석 하여 조회 하 다.
이것 은 헤더 파일 입 니 다.
#import <Foundation/Foundation.h>
@interface viewController : UIViewController
@property(nonatomic,retain) NSString *cityname;
@property(nonatomic,retain) NSString *cityid;
@property(strong,nonatomic) NSMutableDictionary *mutArray;
@property (nonatomic,retain) IBOutlet UITextView *txtView;//
@property (nonatomic,retain) IBOutlet UITextField *searchtext;// ,
@property (nonatomic,retain) IBOutlet UIButton *button;//
-(IBAction)search:(id)sender; //
-(IBAction)backgroundTap:(id)sender;
-(IBAction)textFieldDone:(id)sender;
-(NSMutableArray *)XML; // XML
@end
파일
빠 질 수 없 는 콘 텐 츠 입 니 다. JSON 해석 에 사용 되 는 세 개의 라 이브 러 리 는 JSONkit, SBJSon, TouchJSon 입 니 다. XML 분석 에 사용 되 는 라 이브 러 리 는 TBXML. h 입 니 다.
TBXML.m NSDataAdditions.h NSDataAdditions. m 이 네 개의 파일 나 는 헤더 파일 에 모두 불 러 왔 다.
#import "viewController.h"
#import "TouchJson/JSON/CJSONDeserializer.h"
#import "SBJson/SBJson.h"
#import "JSONKit/JSONKit.h"
#import "TBXML.h"
@implementation viewController
@synthesize cityname;
@synthesize cityid;
@synthesize txtView;
@synthesize searchtext;
@synthesize button;
@synthesize mutArray;
-(void)viewDidLoad
{
[super viewDidLoad];
self.searchtext.placeholder=@"please input the city name : ";
self.searchtext.borderStyle = UITextBorderStyleRoundedRect;
//placeholder UITextField
//borderStyle
}
-(NSMutableArray *)XML
{
NSMutableArray *array=[[NSMutableArray alloc]init];
/* NSString *path = [[NSBundle mainBundle] pathForResource:@"city" ofType:@"xml"];
NSData *data = [NSData dataWithContentsOfFile:path];
NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
string = [string stringByReplacingOccurrencesOfString:@"encoding=\"gb2312\"" withString:@""];
NSData *newData = [string dataUsingEncoding:NSUTF8StringEncoding];
TBXML *tbXml = [TBXML tbxmlWithXMLData:newData];
*/
/* TBXML *tbXml = [TBXML tbxmlWithXMLData:[NSData dataWithContentsOfFile:@"city.xml"]];*/
/* TBXML *tbXml = [[TBXML tbxmlWithXMLFile:@"city.xml"] retain]; // retain */
// xml TBXMLElement * root = tbXml.rootXMLElement; :
// retain newData retain
TBXML *tbXml = [[TBXML tbxmlWithXMLFile:@"city.xml"] retain];
TBXMLElement * root = tbXml.rootXMLElement;
if (root)
{
// @“city”
TBXMLElement *info = [TBXML childElementNamed:@"city" parentElement:root];
while (info != nil)
{
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
TBXMLElement *pName = [TBXML childElementNamed:@"cityname" parentElement:info];
TBXMLElement *pID = [TBXML childElementNamed:@"cityid" parentElement:info];
// @“city”
self.cityname = [TBXML textForElement:pName];
self.cityid = [TBXML textForElement:pID];
[dict setObject:self.cityid forKey:@"id"];
[dict setObject:self.cityname forKey:@"name"];
//
[array addObject:dict];
//
info = [TBXML nextSiblingNamed:@"city" searchFromElement:info];
// XML @"city"
}
}
return array;
}
프로젝트 에 xml 파일 을 불 러 올 때 홈 디 렉 터 리 에 불 러 오 는 것 을 기억 하 세 요. 바로 AppDelegate. h 파일 을 저장 하 는 디 렉 터 리 에서 이 프로그램 을 할 때 이곳 에서 큰 실 패 를 했 습 니 다.
xml 파일 을 프로젝트 에 불 러 왔 는데 찾 을 수 없 었 습 니 다. 나중에 xml 파일 을 홈 디 렉 터 리 에 불 러 오 려 고 했 는데 성 공 했 습 니 다.하지만 너희들 이 할 때 한번 해 보고 검증 해 볼 수 있다.
-(IBAction)search:(id)sender
{
// NSURL *url=[NSURL URLWithString:@"http://api.liqwei.com/chinese/?language=gb|py&content= .html"];
NSArray *array = [[NSArray alloc]initWithArray:[self XML]];
/* NSArray *keys=[array allKeys]; value key
for (NSString *key in keys)
{
NSString *result=[NSString stringWithFormat:@"key=%@,value=%@",key,[array objectForKey:key]];
NSLog(@"%@",result);
}
*/
for(NSDictionary *dict in array)
{
if([searchtext.text isEqualToString:[dict objectForKey:@"name"]])
{
NSString *string = [NSString stringWithFormat:@"http://m.weather.com.cn/data/%@.html",[dict objectForKey:@"id"]];
NSURL *url = [NSURL URLWithString:string]; //
NSError *error;
NSString *jsonString = [NSString stringWithContentsOfURL:url
encoding:NSUTF8StringEncoding
error:&error];
// NSLog(@"jsonString------>%@",jsonString);
// JSON
NSDictionary *rootDic = [[CJSONDeserializer deserializer]
deserialize:[jsonString dataUsingEncoding:NSUTF8StringEncoding]
error:&error];
NSDictionary *weatherInfo = [rootDic objectForKey:@"weatherinfo"];
//
txtView.text = [NSString stringWithFormat:@" : %@ %@
:%@
:%@
:%@
:%@",
[weatherInfo objectForKey:@"date_y"],
[weatherInfo objectForKey:@"week"],
[weatherInfo objectForKey:@"city"],
[weatherInfo objectForKey:@"weather1"],
[weatherInfo objectForKey:@"temp1"],
[weatherInfo objectForKey:@"index_d"]];
}
}
[sender resignFirstResponder]; // enter
}
-(IBAction)backgroundTap:(id)sender //
{
[searchtext resignFirstResponder];
}
-(IBAction)textFieldDone:(id)sender // return
{
[sender resignFirstResponder];
}
뒤의 이 두 함 수 는 가상 키 보드 를 그 으 라 는 뜻 이지 만 xib 파일 에서 view 의 기본 클래스 를 UIControl 로 수정 해 야 합 니 다. 더 이상 UIView 가 아 닙 니 다.
또한 textField 는 File 's Owner 에 직접 연결 할 수 없습니다. 시 뮬 레이 터 는 기본적으로 touch Down touch up inside 와 원 하 는 연결 이 가능 하기 때 문 입 니 다.
이벤트 가 일치 하지 않 기 때문에 touch Down touch up inside 등 이벤트 에서 원 하 는 것 을 선택 하고 File 's Owner 와 직접 연결 해 야 합 니 다.
touch Down 이벤트 선택 두 번 째 방법 은 Did End on Exit 를 선택 하 는 시간 입 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.