iOS開(kāi)發(fā)中兩個(gè)常見(jiàn)問(wèn)題的處理
(一) “Unknown class XXViewController in Interface Builder file.” 問(wèn)題處理
最近在靜態(tài)庫(kù)中寫(xiě)了一個(gè)XXViewController類(lèi),然后在主工程的xib中,將xib的類(lèi)指定為XXViewController,程序運(yùn)行時(shí),報(bào)了如下錯(cuò)誤:
- Unknown class XXViewController in Interface Builder file.
之前也遇到這個(gè)問(wèn)題,但已記得不太清楚,所以又開(kāi)始在stackoverflow上找答案。
其實(shí)這個(gè)問(wèn)題與Interface Builder無(wú)關(guān),最直接的原因還是相關(guān)的symbol沒(méi)有從靜態(tài)庫(kù)中加載進(jìn)來(lái)。這種問(wèn)題的處理就是在Target的”Build Setting”–>“Other Link Flags”中加上”-all_load -ObjC”這兩個(gè)標(biāo)識(shí)位,這樣就OK了。
(二)關(guān)于Unbalanced calls to begin/end appearance transitions for …問(wèn)題的處理
我們的某個(gè)業(yè)務(wù)有這么一個(gè)需求,進(jìn)入一個(gè)列表后需要立馬又push一個(gè)web頁(yè)面,做一些活動(dòng)的推廣。在iOS 8上,我們的實(shí)現(xiàn)是一切OK的;但到了iOS 7上,就發(fā)現(xiàn)這個(gè)web頁(yè)面push不出來(lái)了,同時(shí)控制臺(tái)給了一條警告消息,即如下:
- Unbalanced calls to begin/end appearance transitions for ...
在這種情況下,點(diǎn)擊導(dǎo)航欄中的返回按鈕時(shí),直接顯示一個(gè)黑屏。
我們到stackoverflow上查了一下,有這么一段提示:
- occurs when you try and display a new viewcontroller before the current view controller is finished displaying.
意思是說(shuō)在當(dāng)前視圖控制器完成顯示之前,又試圖去顯示一個(gè)新的視圖控制器。
于是我們?nèi)ヅ挪榇a,果然發(fā)現(xiàn),在viewDidLoad里面去做了次網(wǎng)絡(luò)請(qǐng)求操作,且請(qǐng)求返回后就去push這個(gè)web活動(dòng)推廣頁(yè)。此時(shí),當(dāng)前的視圖控制器可能并未顯示完成(即未完成push操作)。
- Basically you are trying to push two view controllers onto the stack at almost the same time.
當(dāng)幾乎同時(shí)將兩個(gè)視圖控制器push到當(dāng)前的導(dǎo)航控制器棧中時(shí),或者同時(shí)pop兩個(gè)不同的視圖控制器,就會(huì)出現(xiàn)不確定的結(jié)果。所以我們應(yīng)該確保同一時(shí)間,對(duì)同一個(gè)導(dǎo)航控制器棧只有一個(gè)操作,即便當(dāng)前的視圖控制器正在動(dòng)畫(huà)過(guò)程中,也不應(yīng)該再去push或pop一個(gè)新的視圖控制器。
所以***我們把web活動(dòng)的數(shù)據(jù)請(qǐng)求放到了viewDidAppear里面,并做了些處理,這樣問(wèn)題就解決了