前言
之前写的都是一些UI控件的使用,数据来源都是自己创建的,这次的天气预报使用到了网络请求到数据,所以首先要学习网络请求数据然后对数据进行处理,找到自己要用到的数据,第一天,被网络请求困住了好久,几乎没有什么进度,到第二天,请求到了数据,理了理思路,之后就写的还算是比较流畅
GitHub地址天气预报
难点
- 数据的请求,请求的具体实现可以看NSURLSession请求数据(get方法,协议方法)
- 数据的更新,tableView的更新
思路
- First
每添加一个城市就在scrollerView上添加一个自定义的WeatherView(UIView),底下的按钮是跳转到管理界面,将城市添加到一个可变数组中
Second
这里的管理界面是一个TableView自定义的cell,点击加号就可以进行城市搜索,然后添加城市
这也是一个tableView,点击单元格之后就会转回到管理界面。然后就显示添加的城市
坑
-
关于数据添与tableView上
- 第一个坑
//要判断数据是否完全已经获取完成,每个城市的数据是否都已经获取到 HeadTableViewCell *headCell = [_tableView dequeueReusableCellWithIdentifier:@"headCell" forIndexPath:indexPath]; if (_messageArray.count && _weekArray.count) { .......... }
-
第二个坑
在管理界面中有显示城市的温度和时间,之前我是用数据来进行存储,根据下标表示对应城市数组中城市的温度,但是!!!这样当我返回到管理界面时,温度和城市竟然是不对应的,ok吧,能力有限,咱也不懂,咱也还没有学,应该就要懂了,所以我用了两个字典,这样就不会不对应了!
id objc = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil]; if ([objc[@"HeWeather6"][0][@"status"] isEqualToString:@"ok"]) { NSString *dataString = objc[@"HeWeather6"][0][@"update"][@"loc"]; NSString *tempString = objc[@"HeWeather6"][0][@"now"][@"tmp"]; [self->_cityDataDictionary setObject:tempString forKey:self->_cityNameArray[i]]; [self->_cityDateDictionary setValue:dataString forKey:self->_cityNameArray[i]]; [self performSelectorOnMainThread:@selector(datareload) withObject:self waitUntilDone:NO]; }