這一節(jié)主要介紹UITableView以及ipad,Demo為從Flicker下載圖片并顯示,但是實(shí)際過(guò)程中發(fā)現(xiàn)需要FQ并使用HTTPS連接,所以這次用了兩個(gè)Demo,一個(gè)是課程中的Demo,另一個(gè)是簡(jiǎn)化的。
最后調(diào)試過(guò)程中還找到Xcode中觀察變量的一個(gè)小技巧。
UITableView是iOS中最常用的表視圖,通訊錄中的聯(lián)系人、手機(jī)設(shè)置里的每一個(gè)選項(xiàng)都是表視圖中的一個(gè)單元格cell,微信、微博每一條記錄其實(shí)也是一個(gè)cell,只不過(guò)是組成要素更多一些而已。
(1)兩個(gè)重要的協(xié)議
UITableViewDataSource和UITableViewDelegate是UITableView里兩個(gè)重要的協(xié)議(可以把協(xié)議理解成接口),前者用來(lái)實(shí)現(xiàn)單元格數(shù)據(jù)源的控制,包括兩個(gè)必須實(shí)現(xiàn)的:指定單元格cell數(shù)量以及分組數(shù)量,其他諸如刪除、移動(dòng)等操作也是通過(guò)實(shí)現(xiàn)這個(gè)協(xié)議里的方法來(lái)使用。


UITableViewDelegate,這個(gè)協(xié)議提供用戶(hù)與UITableView交互操作的一系列方法,比如最常用的點(diǎn)擊單元格的響應(yīng)方法。
(2)cell的復(fù)用
為了節(jié)約資源,iOS會(huì)對(duì)cell進(jìn)行復(fù)用,單獨(dú)有一個(gè)地方存放移出屏幕的cell,當(dāng)向上滑動(dòng)UITableView時(shí),如果隊(duì)列中有可復(fù)用的cell,就可以直接取出使用,需要注意的是,這里的復(fù)用有一個(gè)限制條件,即cell的樣式都相同。
iPad中有兩種常用UI控件,彈出窗口UIPopoverController和目錄-內(nèi)容組合控件UISplitViewController,本次課程介紹了后者,UISplitViewController由兩個(gè)視圖組成,一個(gè)是目錄視圖master,一個(gè)是內(nèi)容視圖detail,Demo就是通過(guò)master中使用UITableView顯示圖片名稱(chēng),點(diǎn)擊后在內(nèi)容視圖detail里加載對(duì)應(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é)議里提供了方法來(lái)解決橫豎屏?xí)rmaster視圖是否顯示的問(wèn)題 ,需要注意的是,UISplitViewControllerDelegate很特殊,需要在viewDidLoad之前設(shè)置
Flicker目前被墻,所以需要FQ訪問(wèn),注冊(cè)申請(qǐng)API的key即可,驗(yàn)證發(fā)現(xiàn)只能通過(guò)HTTPS訪問(wèn),所以對(duì)FilckerFetcher里的地址都修改成HTTPS

下載得到的數(shù)據(jù)一直為nil,報(bào)錯(cuò)也是提示數(shù)據(jù)空,檢查發(fā)現(xiàn),請(qǐng)求HTTPS連接時(shí)不能使用+dataWithContentsOfURL:這個(gè)方法,因?yàn)闊o(wú)法設(shè)置安全驗(yàn)證相關(guān),而請(qǐng)求HTTPS連接是必須對(duì)安全驗(yàn)證進(jìn)行設(shè)置的,否則請(qǐng)求失敗,所以得不到數(shù)據(jù)。
參考:http://stackoverflow.com/questions/14013307/datawithcontentsofurl-ios-https-self-signed-certificate
這里使用了NSURLConnection的委托方法,來(lái)使客戶(hù)端忽略證書(shū)驗(yàn)證
參考:http://m.survivalescaperooms.com/stan0714/archive/2012/03/21/2409872.html
還有其它方法,沒(méi)有進(jìn)行嘗試,這種方法據(jù)說(shuō)是蘋(píng)果不允許的,提交應(yīng)用時(shí)會(huì)有問(wèn)題。
還遇到一個(gè)問(wèn)題就是獲取圖片數(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ù)可能需要多次才傳輸完全。
同樣問(wèn)題后來(lái)也出現(xiàn)在獲取圖片列表的json數(shù)據(jù)時(shí)(之前調(diào)試時(shí)數(shù)據(jù)恰好一次就獲取完全,沒(méi)注意處理)

用鼠標(biāo)選中變量或者下方觀察變量都可以,但有時(shí)始終覺(jué)得不方便,斷點(diǎn)調(diào)試時(shí)可以在輸出窗口輸入“po 變量名”來(lái)觀察變量賦值情況

Demo效果:
目前完整版Demo點(diǎn)擊單元格還有bug,即第一次點(diǎn)擊列表正常,第二次點(diǎn)擊沒(méi)有響應(yīng),"didSelectRowAtIndexPath"方法也沒(méi)有進(jìn)入。盼高手指點(diǎn),若有更新也會(huì)及時(shí)補(bǔ)充。


新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注