时间:2021-07-01 10:21:17 帮助过:36人阅读
视频播放地址:http://www.gxlcms.com/course/572.html
在开发IOS过程中的难点:
1. swift语言里面的?和!问题
有帮助的网页,网上查了很多,各说纷云,看得一头雾水,还好一个网页讲得算是明白一点。
补充一点我个人的理解,swift语言看起来简单优雅,实际上里面藏了很多玄机。之所以要用?和!,目的是为了让代码更明确,同时给编译器提供更多线索,发现更多潜在错误。它是Apple发行的语言,很符合Apple的性格,它要你把事情弄清楚再写代码,而不是把模糊的问题丢给编译器来做决定。
2. table view的逻辑
由于iOS系统是不开源的,因此我们要实现表格功能必须安装系统预定好的套路来走。有几个关键点,第一个是它的2个代理,其中一个代理负责提供数据,所谓提供数据,就是2个最主要的接口函数,第一个是告诉系统表格有多少行,第二个就是告诉系统每一行里面的数据是什么内容。第二个会被多次调用,假设一个页面里面有10行,那么这个接口函数就会被调用10次。但不会超出一个页面的次数,因为系统只会请求当前用户看到的页面的数据。假如表格的数据有100个,那么它是通过不断滚动的过程中丢弃旧的,填充新的数据这种方式来实现的。
这是关于view的一个代理,另外一个代理是关于controller的,就是当用户点中表格的某一项时,程序要做些什么,这里面最常用的就是didSelected接口函数,开发者只需要在这里面写自己的实现代码即可。要注意不要写到didDeselected里面,这里面的函数名很容易搞混,这个Deselected是某一项从选中变成不被选中时呼叫的接口。一开始我写到这个里面,总感觉哪里不对,后来才发现。
使用customer类型的prototype时,如何访问里面的label对象?tag的使用。
常见的表格例子,表格里面的cell只有最多2个标签,但我的项目里要放入5个标签,那么如何在代码里面操作这些标签呢?由于界面是在IB里面拉进去的,而cell里面的标签却不能通过ctrl drag的方式拉进代码里面。后来看到一个例子是给每个标签定一个tag值,然后在代码里面用viewByTag
UILabel *name = [cell viewWithTag:TAG_NAME]; UILabel *singer = [cell viewWithTag:TAG_SINGER]; UILabel *code = [cell viewWithTag:TAG_CODE]; UILabel *lang = [cell viewWithTag:TAG_LANG]; UILabel *type = [cell viewWithTag:TAG_TYPE];
通过这样的方式就能获取到对于的label。
后来偶然的机会了解到,还是能通过直接的方式访问,但麻烦一点,就是要先把cell用一个class定义好,然后在interface里面手工建立好label的声明,这个时候就可以storyboard里面拉线到table view里面了。
这个页面里面讨论了这个问题。
表格的配置不当,很容易导致app崩溃,而且经常会看到:
在这个地方崩溃:AppDelegate: UIResponder, UIApplicationDelegate
debug显示的信息是:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UINavigationItem tableView:numberOfRowsInSection:]: unrecognized selector sent to instance 0x7fd9d1760d70'
这个原因其实是我在storyboard里面看到table view的data source没有关联,就自己把数据关联到table上面了。很多时候这种崩溃都说由于这个关联的datasource不对,可以先断开来试试。按照我的理解,因为这底层是看不到的,只能猜,就是它关联了这个,就把另一个释放了,从而有用的那个对象找不到,造成系统崩溃。这就是为什么很多资深玩家不喜欢用stroyboard,因为不好掌控,有些隐藏的东西不容易发现。而用代码来实现界面的构造虽然麻烦一点,但胜在够明白,写成什么样就是什么样。而我现阶段还是要依赖图形的工具,我体会图形的一点不好的地方就是2个项目的storyboard不可比较,曾经有些例子,完全按照教程来一步一步做,可是死活不对劲,但下载老师做好的项目又是正常的,比对代码也没有差别,差别就在storyboard,可是storyboard里面的差异非常大,根本看不出端倪,而且把对方的文件直接覆盖自己的也错误百出。
总的来说,还是自己功夫不够深。以后还要深入把基础打好才行。
3. search bar的逻辑
以前的search bar和search display之类的对象是分开的,后来Apple提供了整合在一起的方案,而且还把搜索的算法也封装成对象,期望可以简化开发者的工作。可是对于我这种开发者来说是恰恰相反。反而是最简单的search bar更适合我,因为我只需要在searchbar的内容发生改变的时候运行一次查找,然后把表格刷新一次就行了。而如果调用那些捆绑的display controller,则需要实现更多的协议,而且还要提供一个输出结果显示的table view controller,真的搞得我头晕。Apple官方的资料里面也提供了一个实现的例子,可是这个例子本身就很复杂,涉及到多个view controller。
这个页面里面提供的方式比较适合我。
这个是官方提供的例子,是Apple主导的做法,他们已经剪除了旧的那种做法,现在推荐使用ui search controller的方式,但是不太清楚这样改的背景原因是什么?感觉也没有那么好用啊。
4. 用IB来做界面还是用代码里面实现?
用代码来设置控件的大小有可能在适配不同的屏幕时出现问题,暂时还没有去研究auto resize的部分要怎样做。
但用代码要做界面其实没有想象中那么难,其实只有把界面中的控件当成对象来处理就可以了,创建对象,设置对象的熟悉,把对象add到view里面,设定相关的delegate,然后就OK了。
课程主讲老师郭崇智年轻有为,更符合年轻人的口味,讲课比较轻松自然,让我们听起来也感觉到轻松,更加能够听的进去。
以上就是尚学堂ios初级视频资料分享的详细内容,更多请关注Gxl网其它相关文章!