斯坦福iOS7公开课11笔记及演示Demo&访问HTTPS链接下载数据
这一节主要介绍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
还有其它方法,没有进行尝试,这种方法据说是苹果不允许的,提交应用时会有问题。
还遇到一个问题就是获取图片数据时报错,这是因为图片接收不完全,现象图片在屏幕上显示一小部分立即消失,原因是之前只接受了部分数据就马上转化图片,并通知主线程更新UI
实际上应该数据接收完全后再做后续操作,因为数据可能需要多次才传输完全。
同样问题后来也出现在获取图片列表的json数据时(之前调试时数据恰好一次就获取完全,没注意处理)
4.调试小技巧
用鼠标选中变量或者下方观察变量都可以,但有时始终觉得不方便,断点调试时可以在输出窗口输入“po 变量名”来观察变量赋值情况
Demo效果:
目前完整版Demo点击单元格还有bug,即第一次点击列表正常,第二次点击没有响应,"didSelectRowAtIndexPath"方法也没有进入。盼高手指点,若有更新也会及时补充。
斯坦福iOS7公开课11笔记及演示Demo&访问HTTPS链接下载数据的更多相关文章
- 斯坦福iOS7公开课10笔记及演示Demo
这一节主要介绍了多线程中的串行队列以及滚动视图UIScrollView. 1 .多线程 这一节只是简单介绍了多线程的串行队列,即把任务加入线程队列后按顺序逐步执行. (1)目前iOS多线程提供的方法主 ...
- 斯坦福iOS7公开课4-6笔记及演示Demo
1.变量类型别滥用id,如果不仔细容易在程序执行时引发错误,因为在编译阶段编译器只是检测变量对象所属类型,尤其是类型为id时代表任何类型都可以通过检查,但不会检测变量对象调用的方法,这样当对象所属类不 ...
- 斯坦福iOS7公开课7-9笔记及演示Demo
这一部分主要介绍了iOS的绘图.手势.协议.block.力学特效动画(包括重力.碰撞.吸附等)以及自动布局的内容. 1.绘图.手势 (1)调用一个自定义的UIView时,可以使用awakeFromNi ...
- 斯坦福iOS7公开课1-3笔记及纸牌Demo
1.MVC Model:模型 描述程序是什么,例如数据库操作之类的行文以及纸牌Demo里纸牌玩法都是写在Model这一层,通过Notification和KVO(后续文章会介绍)两种方式与Control ...
- 【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记19 为Demo添加手势
在这一话中我们将应用上一话学到的知识来为Demo添加手势识别,首先添加一个缩放的功能,其次添加一个拖动功能,使得小人的表情可以随着我们的手指改变. 首先来添加一个缩放手势的识别器,我们来到FaceVi ...
- 【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记30 ScrollView Demo实战
在上一话中我们创建了一个通过URL读取图片的Demo,这个Demo是不能拖动和缩放的.如今给它添加选项让它能够手动切换URL,并把图片加入到ScrollView中. 向Storyboard中拖入一个s ...
- 【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记1 IOS8概述
首先感谢网易公开课和SwiftV课堂的朋友们辛苦翻译,这个系列是我学习斯坦福IOS8公开课的个人心得体会和笔记,希望能给大家带来启发. 首先我们要知道IOS系统中的结构情况,从贴近硬件的底层到贴近用户 ...
- 【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记2 Xcode、Auto Layout及MVC
原文链接不知道在哪, 接着上一话来讲,上一话中讲到了MVC,那么MVC在IOS8开发中是如何应用的呢?Paul Hegarty老师给我们展示了一个计算器的Demo,首先新建一个工程,老师把AppDel ...
- 【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记38 Unwind Segue反向过渡
之前我们接触过了segue,这是IOS中最主要的传递方式,今天来解说一下怎样进行反向的segue. 反向过渡的使用前提是发出过渡的MVC必须是由目标MVC直接或者间接正向过渡来的.反向过渡是唯一不会创 ...
随机推荐
- 设置函数环境——setfenv
当我们在全局环境中定义变量时经常会有命名冲突,尤其是在使用一些库的时候,变量声明可能会发生覆盖,这时候就需要一个非全局的环境来解决这问题.setfenv函数可以满足我们的需求. setfenv(f, ...
- ubuntu启动器和dash里应用图标不正常
在以下目录: /usr/share/applications~/.local/share/applications 添加或编辑(pycharm图标不正常):jetbrains-pycharm.desk ...
- sitemesh学习笔记(1)
最近在学习web开发的时候,发现很多的页面都存在同样的导航栏,登陆栏,js,jQuery等等相同的元素.这样就感觉开发变得好臃肿啊,并且,有时候改一个元素,就要把所有包含这个元素的页面全部重新码一遍, ...
- dock基本使用
通过Docker源安装最新版本通过Docker源安装最新版本 要安装最新的 Docker 版本,首先需要安装 apt-transport-https 支持,之后通过添加源来安装.要安装最新的 Dock ...
- SQL中对XML的处理
DECLARE @PreSOMasterXML XMLDECLARE @SDA VARCHAR(100)SET @PreSOMasterXML=N'<ProcessTaskRequest& ...
- cart中回归树的原理和实现
前面说了那么多,一直围绕着分类问题讨论,下面我们开始学习回归树吧, cart生成有两个关键点 如何评价最优二分结果 什么时候停止和如何确定叶子节点的值 cart分类树采用gini系数来对二分结果进行评 ...
- SeaJS 模块化加载框架使用
SeaJS 是一个遵循 CMD 规范的模块化加载框架 CommonJS,CMD,AMD等规范后文会提到,这里主要先了解如何在代码中使用. 如果你有使用过nodejs ,那么理解起来就容易多了. 我们通 ...
- Import 元素 (MSBuild)
Import 元素 (MSBuild) Visual Studio 2013 .NET Framework 4 .NET Framework 3 ...
- 在SQL存储过程中给条件变量加上单引号
在SQL存储过程中给条件变量加上单引号,不加语句就会出问题,以下就是在存储过程中将条件where设置成了动态变化的,给where赋完值再和前面的语句拼接,再execute(SQL) ), )), )+ ...
- Python入门笔记(20):Python函数(3):关于lambda
一.lambda函数 1.lambda函数基础: lambda函数也叫匿名函数,即,函数没有具体的名称,而用def创建的方法是有名称的.如下: """命名的foo函数&q ...