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

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

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

    一.UITableView

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

   (1)两个重要的协议

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

     

     

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

         

   (2)cell的复用

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

    二.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之前设置

      

     三.Demo过程问题总结

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

       

      

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

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

      这里使用了NSURLConnection的委托方法,来使客户端忽略证书验证(网络请求建议使用更新的NSURLSession或第三方类库AFNetWorking等)

      参考: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数据时(只是当时恰好数据一次就获取完全过,没注意处理)

     

     四.调试小技巧

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

     

    Demo效果:

    目前完整版Demo点击单元格还有bug,欢迎解决后告知原因,若有更新也会及时补充。

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

        

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。