Table of Contents
前言
- 该作品是2019年软件工程课设作品,整体界面仿照猫眼电影App制作,其中电影列表与影院列表是直接调用的猫眼的api,安排的演出场次以及下订单是合作的后台小伙伴写的接口
- 由于是课设作品,项目中大量的运用了各色第三方库,下面会一一放出,感谢开源,不然一个选座我就得写两周了
- 本次收获最多的还是增加了和后台对接的经验,中间踩了很多网络请求错误的坑,在后面会放我对各种code报错的总结。另外学到最多的还是前后端对于数据类型不一样导致的问题(其实我也不是很懂,都是后台大大牛逼)
- 另外就是对于常用的第三方库越来越熟练了,JSONModel,Masonry,SDWebImage,AFNetworking(其实也就是那几个方法。。。)
- 总的来说,这次收获比我想的还是要大一点,这两周不到的时间能写完这样一个看起来非常像样的项目,很有成就感,比大二上的时候要老来呢多了
- 此外就是觉得很多时候UI部分用用网上开源部分就很好了,没必要浪费太多时间,这次依然写了很多重复的代码,大多是cell布局以及JSONModel解析,真的是又臭又长
GitHub
- BGL-Cinema-System
- Demo前半部分关于热映电影以及所有影院的部分可以正常使用(因为使用的就是猫眼的api),剩下的登陆注册,选座下单部分由于是后台小伙伴自己写的,所以URL全替换成了无效的
- 如果想看效果可以把网络请求部分注释掉,将tableview row改成死数据,应该就能行了
所有使用到的第三方库
- 高仿猫眼电影APP框架,tabbar下navigationcontroller框架。
- selectSeat movie iOS objective-c(电影选座)
- 高仿猫眼电影选座(选票)模块(High imitation opal film seat selection (vote) module)
- 为应对类似淘宝首页,京东首页,国美首页的复杂布局而写的多样化的collectionview。
- 重量级城市选择框架,类似美团、猫眼电影、美团外卖、百度外卖、百度糯米等团购类app城市选择界面。
- Autoscroll Banner. 无限循环图片、文字轮播器。
- JSONModel,Masonry,SDWebImage,AFNetworking四兄弟就不用说了
- 本来还用了一个这个解决打印日志对于Unicode编码不能正常显示中文的问题,只需要将文件导入工程,不需要引用,就能达到打印日志显示Unicode编码中文数据,但是用的途中崩溃了,老哥也好久没跟新了,提了issue也没有用,所以后来删了
项目详细说明
- 由于扯了很多第三方库,导致整个项目结构无比混乱,除了最开始的登陆注册我还是老老实实按照MVC来写的,后面就开始一个controller就完事了
- 所以这部分我会写清楚每个界面对应ViewController是哪个,至于配套的View和Model看一下头部的#import就行
登陆注册
登陆
预览
文件名
BGLLoginViewController
注册
预览
文件名
BGLRegisterViewController.h
总结
- 登陆注册是我唯一老老实实按照MVC写的,后面觉得太麻烦了就没搞,一个大C是真的舒服
- 登陆注册可以形成token,但是为了方便展示,并没有使用,最后都是给某个用户使用
- 没加前端输入判断,说实话,就是很粗糙的
城市定位
预览
文件名
LocationViewController
总结
- 使用重量级城市选择框架,类似美团、猫眼电影、美团外卖、百度外卖、百度糯米等团购类app城市选择界面。
- 整个项目使用高仿猫眼电影APP框架,tabbar下navigationcontroller框架。作为UI架构,这里有遇到nav的leftitembutton设置title的问题,最后是每次选择城市后都再次新建button
选择电影
预览
文件名
MovieFirstViewController
总结
- 使用Autoscroll Banner. 无限循环图片、文字轮播器。写最顶上的轮播图
- 这里开始用到了大量的自定义TableViewCell,应该做到着就想好怎样封装
选择影院
预览
文件名
MovieSecondViewController
查看我的订单
预览
文件名
MineViewController
选择场次
预览
文件名
ChooseSessionViewController
总结
- 使用淘宝电影(淘票票)影院电影浏览效果写了影院图片那一块,还挺酷的
选座
预览
文件名
SMViewController
总结
- 使用selectSeat movie iOS objective-c(电影选座),改了几个接口,最后使用遍历dictSeatState,将value为2的key也就是KyoCinameSeatStateSelected的传出key以及在value数组中的序号,即座位号了
- 这一步的时候对于字典的解析更深了一些,字典还是好用啊
遇到的问题
code = xxx
- 使用AFN遇到了很多code=xxx的问题,写了一篇总结博客
- iOS与后台对接时使用AFN会遇到的各种问题
数据传不过去
- 在下订单界面需要传一个座位数组,当时要以JSON数据的形式发出去
- 首先是看着篇OC转JSONJSON与OC互相转换
- 然后发现使用AFN怎么都不对,后台要么就是连访问都没访问到,要么就是拿到的数据都是NULL最后从网上找到这篇文章iOS客户端发送json数据,java(servlet)服务器接受json数据
- 但是之后又出现安全证书的问题code = -1202,靠这个解决了Error Domain=NSURLErrorDomain Code=-1202,Https服务器证书无效
遗憾
- 课设作品按照道理应该也没啥遗憾不遗憾的,本质上就是个各色第三方库的堆砌,但还是有点小遗憾,写下来希望下次改正
- 测试后台接口的时候,经常要在局域网和公网上切换,导致请求的链接一直要变,其实应该写一个宏定义来写链接,一改全部都改了;同时这样在最后上传GitHub的时候还可以把该宏定义改成乱码,防止后台接口暴露
- 由于是课设作品,没怎么追求美观,没放任何动画上去,有点遗憾
- 写了好多好多自定义cell文件,没有用枚举写成可选类型,但是我对于封装cell后数据应该怎样更新还有点想不通
- 城市定位虽然有,但没有用到,如果还要对城市有选择的话,显然对后台压力有点大
- 登陆注册部分其实我在前端没有做任何判断,别说重复密码有没有输对了,就是没写重复密码都没事
- 选座部分其实第一列的座位选不了。。。
- 本来设想的其实是我在下单成功后,生成一个二维码,用户可以扫一扫返还,算是下单成功。可是后台反应,单纯扫一扫无法发送请求确认订单已支付,so,gg