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


        这一节主要介绍UITableView以及iPad,Demo为从Flicker下载图片并显示,但是实际过程中发现需要翻墙并使用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目前被墙,所以需要翻墙访问,注册申请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下载

            

  • 相关阅读:
    hdu1593(find a way to escape)
    每日学习小记 11/02
    将博客搬至CSDN
    浏览器渲染机制
    适配器模式 The Adapter Pattern
    工厂方法模式 The Factory Method Pattern
    观察者模式 The Observer Pattern
    模板方法模式 The Template Method Pattern
    命令模式 The Command Pattern
    迭代器模式 The Iterator Pattern
  • 原文地址:https://www.cnblogs.com/colinhou/p/3952799.html
Copyright © 2020-2023  润新知