·您现在的位置: 云翼网络 >> 文章中心 >> 网站建设 >> app软件开发 >> IOS开发 >> 斯坦福iOS7公开课11笔记及演示Demo&访问HTTPS链接下载数据

斯坦福iOS7公开课11笔记及演示Demo&访问HTTPS链接下载数据

作者:佚名      IOS开发编辑:admin      更新时间:2022-07-23

    这一节主要介绍UITableView以及ipad,Demo为从Flicker下载图片并显示,但是实际过程中发现需要FQ并使用HTTPS连接,所以这次用了两个Demo,一个是课程中的Demo,另一个是简化的。

   最后调试过程中还找到Xcode中观察变量的一个小技巧。

1.UITableView

    UITableView是iOS中最常用的表视图,通讯录中的联系人、手机设置里的每一个选项都是表视图中的一个单元格cell,微信、微博每一条记录其实也是一个cell,只不过是组成要素更多一些而已。

   (1)两个重要的协议

          UITableViewDataSource和UITableViewDelegate是UITableView里两个重要的协议(可以把协议理解成接口),前者用来实现单元格数据源的控制,包括两个必须实现的:指定单元格cell数量以及分组数量,其他诸如删除、移动等操作也是通过实现这个协议里的方法来使用。

     

     

     UITableViewDelegate,这个协议提供用户与UITableView交互操作的一系列方法,比如最常用的点击单元格的响应方法。

         

   (2)cell的复用

      为了节约资源,iOS会对cell进行复用,单独有一个地方存放移出屏幕的cell,当向上滑动UITableView时,如果队列中有可复用的cell,就可以直接取出使用,需要注意的是,这里的复用有一个限制条件,即cell的样式都相同。

2.iPad特有控件

    iPad中有两种常用UI控件,弹出窗口UIPopoverController和目录-内容组合控件UISplitViewController,本次课程介绍了后者,UISplitViewController由两个视图组成,一个是目录视图master,一个是内容视图detail,Demo就是通过master中使用UITableView显示图片名称,点击后在内容视图detail里加载对应图片。

   这里有两点值得注意:

   (1)根据UISplitViewController为iPad独有控件直接判断设备是iPhone还是iPad,UISplitViewController默认0是master目录视图,1是detail内容视图,使用UISplitViewController下,如果获取不到内容视图,设备就是iPhone,反之iPad。

         

   (2)UISplitViewController协议里提供了方法来解决横竖屏时master视图是否显示的问题 ,需要注意的是,UISplitViewControllerDelegate很特殊,需要在viewDidLoad之前设置

      

3.Demo过程问题总结

          Flicker目前被墙,所以需要FQ访问,注册申请API的key即可,验证发现只能通过HTTPS访问,所以对FilckerFetcher里的地址都修改成HTTPS

       

      

      下载得到的数据一直为nil,报错也是提示数据空,检查发现,请求HTTPS连接时不能使用+dataWithContentsOfURL:这个方法,因为无法设置安全验证相关,而请求HTTPS连接是必须对安全验证进行设置的,否则请求失败,所以得不到数据。

      参考:http://stackoverflow.com/questions/14013307/datawithcontentsofurl-ios-https-self-signed-certificate

      这里使用了NSURLConnection的委托方法,来使客户端忽略证书验证

      参考:http://www.cnblogs.com/stan0714/archive/2012/03/21/2409872.html

           

     还有其它方法,没有进行尝试,这种方法据说是苹果不允许的,提交应用时会有问题。

     http://stackoverflow.com/questions/19394628/cant-receive-json-request-via-https-due-to-untrusted-certificate

      还遇到一个问题就是获取图片数据时报错,这是因为图片接收不完全,现象图片在屏幕上显示一小部分立即消失,原因是之前只接受了部分数据就马上转化图片,并通知主线程更新UI

      

     实际上应该数据接收完全后再做后续操作,因为数据可能需要多次才传输完全。

     同样问题后来也出现在获取图片列表的json数据时(之前调试时数据恰好一次就获取完全,没注意处理)

     

4.调试小技巧

     用鼠标选中变量或者下方观察变量都可以,但有时始终觉得不方便,断点调试时可以在输出窗口输入“po 变量名”来观察变量赋值情况

     

    Demo效果:

    目前完整版Demo点击单元格还有bug,即第一次点击列表正常,第二次点击没有响应,"didSelectRowAtIndexPath"方法也没有进入。盼高手指点,若有更新也会及时补充。

    

    简化版Demo下载    完整版Demo下载