斯坦福iOS7公開課11筆記及演示Demo&訪問HTTPS鏈接下載數(shù)據(jù)
這一節(jié)主要介紹UITableView以及iPad,Demo為從Flicker下載圖片并顯示,但是實(shí)際過程中發(fā)現(xiàn)需要FQ并使用HTTPS連接,所以這次用了兩個(gè)Demo,一個(gè)是課程中的Demo,另一個(gè)是簡化的。
***調(diào)試過程中還找到Xcode中觀察變量的一個(gè)小技巧。
一.UITableView
UITableView是iOS中最常用的表視圖,通訊錄中的聯(lián)系人、手機(jī)設(shè)置里的每一個(gè)選項(xiàng)都是表視圖中的一個(gè)單元格cell,微信、微博每一條記錄其實(shí)也是一個(gè)cell,只不過是組成要素更多一些而已。
(1)兩個(gè)重要的協(xié)議
UITableViewDataSource和UITableViewDelegate是UITableView里兩個(gè)重要的協(xié)議(可以把協(xié)議理解成接口),前者用來實(shí)現(xiàn)單元格數(shù)據(jù)源的控制,包括兩個(gè)必須實(shí)現(xiàn)的:指定單元格cell數(shù)量以及分組數(shù)量,其他諸如刪除、移動(dòng)等操作也是通過實(shí)現(xiàn)這個(gè)協(xié)議里的方法來使用。
&;&; UITableViewDelegate,這個(gè)協(xié)議提供用戶與UITableView交互操作的一系列方法,比如最常用的點(diǎn)擊單元格的響應(yīng)方法
(2)cell的復(fù)用
為了節(jié)約資源,iOS會(huì)對cell進(jìn)行復(fù)用,單獨(dú)有一個(gè)地方存放移出屏幕的cell,當(dāng)向上滑動(dòng)UITableView時(shí),如果隊(duì)列中有可復(fù)用的cell,就可以直接取出使用,需要注意的是,這里的復(fù)用有一個(gè)限制條件,即cell的樣式都相同。
二.iPad特有控件
iPad中有兩種常用UI控件,彈出窗口UIPopoverController和目錄-內(nèi)容組合控件UISplitViewController,本次 課程介紹了后者,UISplitViewController由兩個(gè)視圖組成,一個(gè)是目錄視圖master,一個(gè)是內(nèi)容視圖detail,Demo就是通 過master中使用UITableView顯示圖片名稱,點(diǎn)擊后在內(nèi)容視圖detail里加載對應(yīng)圖片。
這里有兩點(diǎn)值得注意:
(1)根據(jù)UISplitViewController為iPad獨(dú)有控件直接判斷設(shè)備是iPhone還是 iPad,UISplitViewController默認(rèn)0是master目錄視圖,1是detail內(nèi)容視圖,使用 UISplitViewController下,如果獲取不到內(nèi)容視圖,設(shè)備就是iPhone,反之iPad。
(2)UISplitViewController協(xié)議里提供了方法來解決橫豎屏?xí)rmaster視圖是否顯示的問題 ,需要注意的是,UISplitViewControllerDelegate很特殊,需要在viewDidLoad之前設(shè)置
三.Demo過程問題總結(jié)
Flicker目前被墻,所以需要FQ訪問,注冊申請API的key即可,驗(yàn)證發(fā)現(xiàn)只能通過HTTPS訪問,所以對FilckerFetcher里的地址都修改成HTTPS
下載得到的數(shù)據(jù)一直為nil,報(bào)錯(cuò)也是提示數(shù)據(jù)空,檢查發(fā)現(xiàn),請求HTTPS連接時(shí)不能使用+dataWithContentsOfURL:這個(gè)方法,因?yàn)闊o法設(shè)置安全驗(yàn)證相關(guān),而請求HTTPS連接是必須對安全驗(yàn)證進(jìn)行設(shè)置的,否則請求失敗,所以得不到數(shù)據(jù)。
;參考:http://stackoverflow.com/questions/14013307/datawithcontentsofurl-ios-https-self-signed-certificate
這里使用了NSURLConnection的委托方法,來使客戶端忽略證書驗(yàn)證
參考:http://www.cnblogs.com/stan0714/archive/2012/03/21/2409872.html
還有其它方法,沒有進(jìn)行嘗試,這種方法據(jù)說是蘋果不允許的,提交應(yīng)用時(shí)會(huì)有問題。
還遇到一個(gè)問題就是獲取圖片數(shù)據(jù)時(shí)報(bào)錯(cuò),這是因?yàn)閳D片接收不完全,現(xiàn)象圖片在屏幕上顯示一小部分立即消失,原因是之前只接受了部分?jǐn)?shù)據(jù)就馬上轉(zhuǎn)化圖片,并通知主線程更新UI
實(shí)際上應(yīng)該數(shù)據(jù)接收完全后再做后續(xù)操作,因?yàn)閿?shù)據(jù)可能需要多次才傳輸完全。
同樣問題后來也出現(xiàn)在獲取圖片列表的json數(shù)據(jù)時(shí)(只是當(dāng)時(shí)恰好數(shù)據(jù)一次就獲取完全過,沒注意處理)
四.調(diào)試小技巧
用鼠標(biāo)選中變量或者下方觀察變量都可以,但有時(shí)始終覺得不方便,斷點(diǎn)調(diào)試時(shí)可以在輸出窗口輸入“po 變量名”來觀察變量賦值情況
目前完整版Demo點(diǎn)擊單元格還有bug,歡迎解決后告知原因,若有更新也會(huì)及時(shí)補(bǔ)充。
簡化版Demo下載 完整版Demo下載
本文鏈接:http://www.cnblogs.com/colinhou/p/3952799.html