iOS获取天气

一、关于数据获取。
通过网络获取数据的两种方法, 一种是通过NSRUL,NSURLREQUEST,NSURLCONNECTION的方法获取。另一种方法是直接通过NSData的initContentwithURL或dataWithContentsOfURL的方法。

描述如下:
方法1:

   NSString *googleURL =@"http://www.weather.com.cn/data/cityinfo/101070101.html";
    NSURL *url = [NSURL URLWithString:googleURL];
    NSURLRequest *request = [[NSURLRequestalloc] initWithURL:url];
    NSURLConnection *connection = [[NSURLConnectionalloc] initWithRequest:request delegate:self];
    [connectionrelease];
    [request release];

委托的处理方法:

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
outString = [[NSStringalloc] initWithData:dataencoding: NSUTF8StringEncoding];
NSLog(@"%@",outString);
}

-(void) connection:(NSURLConnection *)connection
  didFailWithError: (NSError *)error {
    
}

- (void) connectionDidFinishLoading: (NSURLConnection*) connection {
    
}

方法2:

#define kWeatherServiceURLStr @"http://webservice.webxml.com.cn/WebServices/WeatherWebService.asmx/getWeatherbyCityName?heCityName="

   NSString *RequestUrlStr = [NSStringstringWithFormat:@"%@%@",kWeatherServiceURLStr,[[ipCityLocationcitySimpleName]stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];

    NSLog(@"request = %@", RequestUrlStr);

    NSData * ReponseData = [NSDatadataWithContentsOfURL:[NSURLURLWithString:RequestUrlStr]];

第二部分为获取数据后的,数据分析,数据部分通常来讲也有两种方法,第一种是获取到的数据为JSON,第二种方法获取到的数据为XML。

方法1:获取到的数据为JSON。

iOS5之前并没有提供比较好的JSON类库,但是ios5之后就提供了一种公共的方法NSJSONSerialization,而为了保证ios5之前的方法也可以使用,需要使用的第三方库有SBJson和TouchJSON。不过好像SBJson用的人比较多。具体方法实例如下:

TouchJSON:
//获取API接口

NSURL*url=[NSURLURLWithString:@"http://m.weather.com.cn/data/101010100.html"];
//定义一个NSError对象,用于捕获错误信息
NSError*error;
//
NSString*jsonString=[NSString   stringWithContentsOfURL:url  encoding:NSUTF8StringEncoding  error:&error];

//将解析得到的内容存放字典中,编码格式UTF8,防止取值时候发生乱码
NSDictionary*rootDic=[[CJSONDeserializerdeserializer]deserialize:[jsonStringdataUsingEncoding:NSUTF8StringEncoding]error:&error];
//因为返回的Json文件有两层,去第二层类容放到字典中去0
NSDictionary*weatherInfo=[rootDicobjectForKey:@"weatherinfo"];
//取值打印
NSLog(@"今天是%@%@%@的天气状况是:%@%@",[weatherInfoobjectForKey:@"date_y"],[weatherInfoobjectForKey:@"week"],[weatherInfoobjectForKey:@"city"],[weatherInfoobjectForKey:@"weather1"],[weatherInfoobjectForKey:@"temp1"]);

SBJson:
NSURL*url=[NSURLURLWithString:@"http://m.weather.com.cn/data/101180701.html"];
NSError*error=nil;
NSString*jsonString=[NSStringstringWithContentsOfURL:urlencoding:NSUTF8StringEncodingerror:&error];
SBJsonParser*parser=[[SBJsonParseralloc]init];
NSDictionary*rootDic=[parserobjectWithString:jsonStringerror:&error];
NSDictionary*weatherInfo=[rootDicobjectForKey:@"weatherinfo"];
NSLog(@"今天是%@%@%@的天气状况是:%@%@",[weatherInfoobjectForKey:@"date_y"],[weatherInfoobjectForKey:@"week"],[weatherInfoobjectForKey:@"city"],[weatherInfoobjectForKey:@"weather1"],[weatherInfoobjectForKey:@"temp1"]);

iOS类库提供的标准做法:

NSError*error;
//加载一个NSURL对象
NSURLRequest*request=[NSURLRequestrequestWithURL:[NSURLURLWithString:@"http://m.weather.com.cn/data/101180601.html"]];
//将请求的url数据放到NSData对象中
NSData*response=[NSURLConnectionsendSynchronousRequest:requestreturningResponse:nilerror:nil];
//iOS5自带解析类NSJSONSerialization从response中解析出数据放到字典中
NSDictionary*weatherDic=[NSJSONSerializationJSONObjectWithData:responseoptions:NSJSONReadingMutableLeaveserror:&error];
//weatherDic字典中存放的数据也是字典型,从它里面通过键值取值
NSDictionary*weatherInfo=[weatherDicobjectForKey:@"weatherinfo"];
NSLog(@"今天是%@%@%@的天气状况是:%@%@",[weatherInfoobjectForKey:@"date_y"],[weatherInfoobjectForKey:@"week"],[weatherInfoobjectForKey:@"city"],[weatherInfoobjectForKey:@"weather1"],[weatherInfoobjectForKey:@"temp1"]);
//打印出weatherInfo字典所存储数据
NSLog(@"weatherInfo字典里面的内容是--->%@",[weatherInfodescription]);

注意一个问题就是解析出现崩溃的问题,解决方法如下:
4.运行结果(如果想知道每次字符串和字典间取值情况,只需NSLog打印输出就行):

1、取值时发生应用程序崩溃,获取值不正确
有时我们从字典中获取了这样的数据,感觉比较郁闷,并未显示中文,这种情况是我们把数据放到字典中,编码方式是UTF8,取值打印出来的时候就成中文了

在解析出来数据后我想这样取值,

NSDictionaryweatherInfo = [rootDicobjectForKey:@"weatherinfo"];
NSArray
weatherArray = [rootDicobjectForKey:@"weatherinfo"];
for(NSDictionary*dicinweatherArray) {
NSLog(@"----->%@",dic);
}
打印出来的dic数据是这样的

这是我们json文件的第二层数据取出放到了一个数组中,然后定义了一个字典对象在数组中遍历取出存放的数据,于是就想用

NSLog(@"----->%@",[dicobjectForKey:@"city"]);来取出city的值,但是应用程序崩溃

出现这种情况是因为在对解析出数据存值和取值发生问题,说明这种方式是取值是不正确的;

方法2,采用XML的解析方法。

xmlParser = [[NSXMLParseralloc] initWithData:weatherReponseData];

[xmlParsersetDelegate:self];
[xmlParsersetShouldProcessNamespaces:NO];
[xmlParsersetShouldReportNamespacePrefixes:NO];
[xmlParsersetShouldResolveExternalEntities:NO];

// 启动解析命令

- (void)startParse{
//开始解析
[xmlParserparse];

}

// 设定委托方法
#pragma mark NSXMLParserDelegate
#pragma mark xml parser delegate
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{


NSCharacterSet *whitespace = [NSCharacterSetwhitespaceCharacterSet];
string = [stringstringByTrimmingCharactersInSet:whitespace];

if (![stringisEqualToString:@"/n"]) {
[xmlWeatherStringArrayaddObject:string];
}
}

- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError{
NSLog(@"%@", [parseErrordescription]);
}

- (void)parserDidEndDocument:(NSXMLParser *)parser{
[selfoutputParseInfo];

//取出xml中数据后提取信息 
[selfsplitXmlWeatherInfo];
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,636评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,890评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,680评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,766评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,665评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,045评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,515评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,182评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,334评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,274评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,319评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,002评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,599评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,675评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,917评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,309评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,885评论 2 341

推荐阅读更多精彩内容