Rumah  >  Artikel  >  pembangunan bahagian belakang  >  尚学堂ios初级视频资料分享

尚学堂ios初级视频资料分享

巴扎黑
巴扎黑asal
2017-08-25 14:44:491533semak imbas

《尚学堂ios初级视频教程》是尚学堂关于Objective-C语言从基础入门到高级精通的全套视频教程,Objective-C是iOS开发的必备语言.课程会对Objective-C语言进行深入细致的讲述,主要讲解Objective-C基础语法,面向对象编程思想、封装(类的声明和实现、getter和setter方法、属性)、内存管理、继承、多态、分类、协议、block,NSNumber、字符串、数组、字典、日期、文件管理、拷贝等。

594876654af02197.jpg

视频播放地址:http://www.php.cn/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了。

课程主讲老师郭崇智年轻有为,更符合年轻人的口味,讲课比较轻松自然,让我们听起来也感觉到轻松,更加能够听的进去。

Atas ialah kandungan terperinci 尚学堂ios初级视频资料分享. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn