JSON 과 XML 방법 으로 도시 의 날씨 상황 을 분석 하여 조회 하 다.

7257 단어
JSON 해석 과 XML 해석 을 접 하 게 되 어 흥분 되 었 습 니 다. JSON 해석 으로 날씨 조회 라 는 작은 기능 을 적 었 습 니 다. 연습 을 먼저 한 셈 이지 만 절차 에 구멍 이 좀 있 습 니 다. 새우 들 이 시간 을 들 여 고 쳐 주면 감사 하 겠 습 니 다. 완벽 하 지 는 않 지만 초보 자 들 에 게 도움 이 될 것 입 니 다. 쓸데없는 말 은 하지 않 겠 습 니 다.다음은 프로그램 을 봅 시다.
이것 은 헤더 파일 입 니 다. 
#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 를 선택 하 는 시간 입 니 다.

좋은 웹페이지 즐겨찾기