ios期中作业总结
页面介绍:
Sign.h 登陆界面
About.h 用户信息界面
NewInfo 获取通知界面
realeaseNew 发布信息界面
homepage 主页界面
Square 广场界面 (主页界面和广场界面类似,但是获取数据的API不一样)
messageDetail 信息详情界面
replyDetail 回复评论界面
PhotoViewController 点击放大图片,下载图片界面
学习成果:
学会了使用ios网络编程
GET的用法和POST的用法差不多
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | NSString *url = @ "http://172.18.178.56/api/user/login/pass" ; NSDictionary *parameters = @{@ "name" : self .email_textField.text, @ "password" : self .password_textField.text}; AFHTTPSessionManager *manage = [AFHTTPSessionManager manager]; // 设置请求体为JSON manage.requestSerializer = [AFJSONRequestSerializer serializer]; // 设置响应体为JSON manage.responseSerializer = [AFJSONResponseSerializer serializer]; [manage POST: url parameters: parameters headers: nil progress: ^( NSProgress * _Nonnull uploadProgress) { //进度 } success:^( NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { // 登陆成功! NSLog (@ "登陆成功 %@" , responseObject[@ "State" ]); if (![responseObject[@ "State" ] isEqual: @ "success" ]) { UIAlertController * alert = [UIAlertController alertControllerWithTitle:@ "登陆失败" message:@ "" preferredStyle:UIAlertControllerStyleAlert]; [ self presentViewController:alert animated: YES completion: nil ]; [ self performSelector: @selector (dismiss:) withObject:alert afterDelay:0.5]; } UINavigationController *unc = self .navigationController; //更改 navigation根页面的方法 NSMutableArray *controllers = [ NSMutableArray arrayWithArray: unc.viewControllers]; controllers[0] = [[About alloc] init]; [ self .navigationController setViewControllers:controllers]; } failure:^( NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { NSLog (@ "登陆失败" ); }]; |
另外还学会了上传图片和视频的方法,关键是要获取路径
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | NSString * url2 = @ "http://172.26.26.145:8080/uploadfiles" ; //如果没有图片 NSLog (@ "开始发布" ); AFHTTPSessionManager * manager2 = [AFHTTPSessionManager manager]; manager2.responseSerializer = [AFJSONResponseSerializer serializer]; manager2.requestSerializer = [AFJSONRequestSerializer serializer]; NSMutableDictionary *params = [ NSMutableDictionary dictionary]; BOOL check_is_public = true ; [params setObject: _timeTextTield.text forKey : @ "name" ]; [params setObject: _diaryTextView.text forKey : @ "video" ]; [manager2 POST:url2 parameters:params headers: nil constructingBodyWithBlock:^( id <AFMultipartFormData> _Nonnull formData) { UIImage * image = self .fengmian_image; NSData * fileData = UIImageJPEGRepresentation(image, 1); NSString * file = @ "image" ; [formData appendPartWithFileData:fileData name: file fileName: file mimeType:@ "image/" ]; NSString * str_filePath = [[ NSString alloc] initWithFormat: @ "%@%@" , self .preURL, self .videoName]; NSLog (@ "%@" , str_filePath); NSData * temp = [[ NSData alloc] initWithContentsOfFile: str_filePath]; [formData appendPartWithFileData:temp name:@ "video" fileName: @ "video" mimeType:@ "video/" ]; NSLog (@ "上传视频中!!!!!!!" ); } progress:^( NSProgress * _Nonnull uploadProgress) { NSLog (@ "%@" , uploadProgress); } success:^( NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { NSLog (@ "上传成功 %@" ,responseObject); } failure:^( NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { NSLog (@ "上传失败 %@" ,error); }]; NSLog (@ "发布结束" ); |
tableView中自定义cell
在构造
- (UITableViewCell *)tableView:(nonnull UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 函数中,直接把cell当成一个UIView然后进行构建就可以了。
在回复评论这个API上还挺复杂的。要注意父ID的使用就行了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | -( void )liuyanBtnAction:(UIButton *)btn{ NSNumber * boolNumber = [ NSNumber numberWithBool: YES ]; NSDictionary * comment = [[ NSDictionary alloc] initWithDictionary: self .data[@ "Comment" ]]; NSString *url = @ "http://172.18.178.56/api/comment" ; NSLog (@ "%@" , comment[@ "FatherID" ]); NSDictionary *parameters = @{@ "isReply" : boolNumber, @ "content" : self .liuyanField.text, @ "fatherId" : comment[@ "UserID" ], @ "contentId" : comment[@ "ID" ] }; AFHTTPSessionManager *manage = [AFHTTPSessionManager manager]; // 设置请求体为JSON manage.requestSerializer = [AFJSONRequestSerializer serializer]; // 设置响应体为JSON manage.responseSerializer = [AFJSONResponseSerializer serializer]; [manage POST:url parameters:parameters headers: nil progress:^( NSProgress * _Nonnull uploadProgress) { //进度 } success:^( NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { // 登陆成功! NSLog (@ "评论成功 %@" , responseObject); // 添加评论 [ self getComments]; self .liuyanField.text = @ "" ; } failure:^( NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { NSLog (@ "评论失败" ); }]; } |
感受:
这次作业,最难的点,个人觉得是获取到的数据不一致,需要自己转化数据同步。以及找不到API,需要看GO语言的代码,幸好这个学期,我们学了服务计算,才能看懂一些,加上有了同学互相帮助,摸索,才把作业写了出来。其次就是上传图片还不会用,其实也挺简单,只是要上传图片可能失败,需要经过压缩这一步,比较麻烦而已,其他还好。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」