八阿哥一號:
有沒有這種神奇的體驗(yàn), 頁面A push 頁面B 之后在B頁面?zhèn)然粊G丟, 再松手這時還在B頁面, 點(diǎn)擊左上角導(dǎo)航欄返回鍵, 不能返回A頁面了! 就像中了邪一樣, 導(dǎo)航欄倒是在滾動, 但是頁面還是B啊
you see see:
無數(shù)次谷哥+度娘, 無數(shù)次折騰之后找到的解決方法:
[self.navigationController setNavigationBarHidden:NO animated:YES];
對, 就是這么流比, 一個字母都不能錯, 錯了就回不去了, 你可以不信我, 自己慢慢去爬坑??
推測:
系統(tǒng)側(cè)滑手勢對導(dǎo)航欄有特殊處理,在滑了一部分未達(dá)到返回或翻頁的臨界值時,
側(cè)滑手勢對導(dǎo)航欄的控制器棧進(jìn)行了處理, 而這種處理方式導(dǎo)致的導(dǎo)航欄棧的變化不能被傳統(tǒng)設(shè)置導(dǎo)航欄的方法準(zhǔn)確辨識出來;
而 [self.navigationController setNavigationBarHidden:NO animated:YES];
這個方法的動畫實(shí)現(xiàn)可能和側(cè)滑手勢原理有一定共通, 所以可以處理側(cè)滑手勢改變后的棧;
八阿哥二號:
背景:
我們的項(xiàng)目要使用微信支付,但是運(yùn)營申請不下來微信支付資質(zhì), 于是輾轉(zhuǎn)和某銀行(以下簡稱Z銀行)合作, 由銀行提供包裝后的微信支付的SDK給我們用;
在筆者多次嘗試, 對比, 寫demo, 都不能解決問題之后, 整理了一份這個問題的PDF文件, 向Z銀行對接的技術(shù)尋求幫助, 畢竟一個項(xiàng)目不能因?yàn)槲也恍芯筒挥梦⑿胖Ц读税?
如下圖,詳細(xì)說明問題, 并指出我發(fā)現(xiàn)的問題所在, 寄希望于對方能提供新的SDK:
對方人很好,積極配合解決問題,但是就是沒說重新提供SDK...
對方給的解決方案是linker里面加-ObjC如下圖,
詢問緣由,是這么解釋的:
"我們的SDK里面是靜態(tài)庫,在靜態(tài)庫里面的有類目融涣,所以必須在linker里面加-ObjC腕侄,不然程序會找不到類目里面的方法"
很好, 積極幫我解決問題, 也提出了解決辦法, 口頭給這位寶寶點(diǎn)個贊??;
但是, 并沒有解決問題啊,加-OjbC并沒有用啊;
最終在同事的幫助下, 使用-force_load 強(qiáng)制加載Z銀行提供的靜態(tài)庫, 成功解決問題??;
如下圖:
又是一通谷哥+度娘之后, 找到以下有用信息:
Targets選項(xiàng)下有Other linker flags的設(shè)置乍惊,用來填寫XCode的鏈接器參數(shù)锰霜,如:-ObjC -all_load -force_load等蚓挤。
Other linker flags設(shè)置的值實(shí)際上就是ld命令執(zhí)行時后面所加的參數(shù)思犁。
3個常用參數(shù):
-ObjC:加了這個參數(shù)后萨驶,鏈接器就會把靜態(tài)庫中所有的Objective-C類和分類都加載到最后的可執(zhí)行文件中;
-all_load:會讓鏈接器把所有找到的目標(biāo)文件都加載到可執(zhí)行文件中歉摧,但是千萬不要隨便使用這個參數(shù)!假如你使用了不止一個靜態(tài)庫文件腔呜,然后又使用了這個參數(shù)叁温,那么你很有可能會遇到ld: duplicate symbol錯誤,因?yàn)椴煌膸煳募锩婵赡軙邢嗤哪繕?biāo)文件核畴,所以建議在遇到-ObjC失效的情況下使用-force_load參數(shù);
-force_load:所做的事情跟-all_load其實(shí)是一樣的膝但,但是-force_load需要指定要進(jìn)行全部加載的庫文件的路徑,這樣的話谤草,你就只是完全加載了一個庫文件跟束,不影響其余庫文件的按需加載;
小Tips:
-force_load 正確使用方法, -force_load + 空格 + 要強(qiáng)制加載的文件路徑, 比如:
-force_load $(SRCROOT)/Name/Third/libSPaySDK.a