情況一:
MyViewController *sampleViewController = [[[MyViewController alloc]initWithXXX] autorelease]; [self.navigationController pushViewController: sampleViewController animated:true];
BUG:界面無反應
分析可能出錯的原因:
1:self.navigationController為nil,空指針執行pushViewController直接跳過,接著sampleViewController會釋放掉,所以界面會無反應。
self.navigationController為神馬會空呢?navigationController是UIViewController父類繼承來的屬性,不是隨便都能用的,除非你當前viewController是被nav push進來的,或者用xib/代碼做成navigationcontroller的root了,cocoa的代碼應該是給賦值了。(題外話,我很多界面就是局部用了某個ViewController,這種情況該viewController的nav為空,如果要正確使用,可以從app取,可以自己賦值,可以整體界面取。。。想咋取都行)
2、self.navigationController為nil,界面掛了
如果你sampleViewController用到了網絡異步請求,在initWithXXX的時候會去取數,那么你10有89會掛掉。
原因分析:大家網絡請求,經常如下:
TwitterClient *twitterClient = [[TwitterClient alloc] initWithTarget:self action:@selector(XXXReceive:obj:)];[twitterClient getXXX:param];
恭喜你,這種情況不管是不是navigationController為空,你程序極容易掛掉,原因就是因為網絡請求我們都會用異步方式來拉取數據,當數據回來之后,會回調到本類的XXXReceive:obj方法,但是如果界面退出了,數據才收到將如何?那就是不是空指針調用了,TwitterClient里紀錄的需要回調的內存地址上神馬情況都有可能是,回調。。杯具了
解決辦法:twitterClient做成成員,在析構的時候該咋收拾twitterClient的就咋收拾一下吧
3、self.navigationController為nil,界面掛了
和上文一樣twitterClient成員了,dealloc也清理了現場,還是會掛
原因分析:異步的問題,twitterClient已經取到數據,但是sampleViewController已經被釋放了,but dealloc根本沒來得及進來。。。
解決辦法,1:確保nav正確,2:盡量在界面viewDidLoad的時候網絡請求數據,在dispear的時候清理網絡。
情況二:
reason: 'Pushing a navigation controller is not supported'
報上面的錯誤,原因是:
大家知道,可以將ViewController push到一個 NavigationController中。就像是入棧操作!
將一個NavigationController再次push到NavigationController中時,報錯,出 主站蜘蛛池模板: 杭锦旗| 衡阳县| 甘孜| 弥渡县| 龙山县| 庆城县| 山阴县| 佛山市| 榆树市| 灌阳县| 朝阳市| 新丰县| 宁陵县| 望谟县| 墨玉县| 东方市| 攀枝花市| 五华县| 蒲江县| 定安县| 湖州市| 张家界市| 太原市| 隆德县| 阿拉善右旗| 大厂| 襄垣县| 许昌市| 隆昌县| 囊谦县| 普洱| 尼木县| 定日县| 即墨市| 昭通市| 秦皇岛市| 财经| 通渭县| 十堰市| 小金县| 石景山区|