首頁  >  文章  >  後端開發  >  尚學堂ios初級視訊資料分享

尚學堂ios初級視訊資料分享

巴扎黑
巴扎黑原創
2017-08-25 14:44:491472瀏覽

《尚學堂ios初級視訊教程》是尚學堂關於Objective-C語言從基礎入門到高級精通的全套視頻教程,Objective-C是iOS開發的必備語言.課程會對Objective-C語言進行深入細緻的敘述,主要講解Objective-C基礎語法,物件導向程式設計思想、封裝(類別的聲明與實作、getter和setter方法、屬性)、記憶體管理、繼承、多態、分類、協定、block,NSNumber、字符串、陣列、字典、日期、文件管理、拷貝等。

尚學堂ios初級視訊資料分享

影片播放位址: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:numberOfRowsdinsta.]: '-[UINavigationItem tableView:numberOfRowsdinsta0:]:   

這個原因其實是我在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初級視訊資料分享的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn