【iOS】天气预报项目总结

本文总结了一个天气预报应用,重点介绍了如何通过网络请求获取实时天气信息,包括搜索城市、保存城市的功能,以及使用NSJSONSerialization解析数据的过程。作者借此项目学习了网络请求和调试技巧,预示将深化对AFNetworking等库的理解。
摘要由CSDN通过智能技术生成

天气预报项目总结

项目介绍

天气预报项目是一项涉及网络请求的应用,与之前的项目相比,最大的不同在于需要通过学习网络请求来获取实时的天气信息。项目主要包括天气预报界面、搜索城市界面以及保存城市的滚动视图。

天气预报界面

天气预报界面设计简洁,主页展示了当前城市的天气信息。通过点击城市cell,用户可以进入查看特定城市的详细天气信息。另外,界面中还包括一个用于切换到搜索城市界面的按钮,提供了便捷的城市搜索功能。

搜索城市界面

搜索城市界面包含一个文本输入框和一个动态变化的城市列表。在用户输入城市名的过程中,通过网络请求动态获取匹配的城市列表,将其显示在表格中。用户可以点击表格中的城市cell,快速查看相关城市的天气情况。

在搜索界面,点击取消按钮可返回主界面,而点击保存按钮则会判断是否已经保存了该城市,如果没有则保存并返回主界面。

保存城市滚动视图

从主界面点击城市cell进入滚动视图,可以查看所保存的所有城市的天气状态。用户可以通过左右滑动切换城市,方便快捷地查看不同城市的天气信息。

网络请求

网络请求是整个项目中的核心,下面是创建网络请求的五大步骤的示例代码:

- (void)creatUrl {
    NSString *urlString = [NSString stringWithFormat:@"https://geoapi.heweather.net/v2/city/lookup?location=%@&key=b92646e0f4194731b50870798cfad1d0", _textField.text];
    urlString = [urlString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
    NSURL *url = [NSURL URLWithString:urlString];
    
    // 创建请求类
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    
    // 创建会话
    NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self  delegateQueue:[NSOperationQueue mainQueue]];
    
    // 根据会话创建任务
    NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request];
    
    // 启动任务
    [dataTask resume];
}

需要注意的是,在搜索界面中,网络请求应该在文本输入框内容发生变化时触发。具体实现如下:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    [self creatUrl];
    _cityArray = [[NSMutableArray alloc] init];
    _xianshiArray = [[NSMutableArray alloc] init];
    return YES;
}

网络请求的结果在接收服务器响应、接收数据、解析数据的过程中得以体现。下面是相关的协议函数:

// 接收服务器的响应
-(void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition))completionHandler {
    if(self.data == nil){
        self.data = [[NSMutableData alloc] init];
    } else {
        self.data.length = 0;
    }
    
    completionHandler(NSURLSessionResponseAllow);
}

// 接收到数据,该方法会被调用多次
- (void)URLSession:(NSURLSession *)session dataTask:( NSURLSessionDataTask *)dataTask didReceiveData:( NSData *)data {
    [self.data appendData:data];
}

// 数据请求完成或者请求出现错误调用的方法
- (void)URLSession:(NSURLSession *)session task:( NSURLSessionTask *)task didCompleteWithError:( NSError *)error {
    if (error == nil) {
        // 解析数据
        NSDictionary *secondDictionary = [NSJSONSerialization JSONObjectWithData:_data options:kNilOptions error:nil];
        
        // 在此进行操作
    }
    [_tableView reloadData];
}

在解析数据时,可以通过查看相应API返回的数据格式,使用NSJSONSerialization进行解析,获取所需的天气信息。

收获

  1. 这个项目让我学习了一些新知识,例如网络请求,JSON解析数据等。
  2. 让我了解到了全局断点这个调试工具,很好用,但也不是万能的,后续还将继续积累调试经验

结语,这是笔者第一次接触到网络请求,后面一个项目知乎日报中,将会更深入的了解网络请求的知识,例如使用AFNetworking第三方库等,敬请期待

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值