前言:
可能我還沒有掌握IOS開發(fā)的精髓, 總感覺寫ios代碼像調(diào)bug, 任何一個功能開發(fā)完成之后總會有莫名其妙的問題, 最終這些問題很大概率會歸結(jié)為"系統(tǒng)特性".
正文:
問題一
項(xiàng)目中想要實(shí)現(xiàn)一個控制器的嵌套, 選了DZNSegmentedControl
控件, 使用過程中出現(xiàn)了如下圖的問題
控件的使用在第二個控制器里, 當(dāng)返回第一個控制器時(shí), 應(yīng)用直接崩潰. 工程項(xiàng)目中沒有一行有用的日志輸出, 只能一行一行看代碼, 最終看代碼并與demo對比沒發(fā)現(xiàn)任何不妥, 只能一行行注釋代碼看運(yùn)行效果:
經(jīng)過運(yùn)行測試, 發(fā)現(xiàn)是上述行代碼引起的. 但是這個功能是什么相比不用多說,是很必要的,那怎么解決?
從現(xiàn)狀分析我們可知, 當(dāng)我們返回第一個控制器時(shí),我們使用DZNSegmentedControl
控件的第二個控制器被銷毀了, 由此引發(fā)崩潰. 而崩潰的原因在于 scrollview
的segmentedControl
代理不為空. 解決辦法很簡單, 在銷毀時(shí)讓它為空!
于是在第二個控制器中添加了如下代碼:
-(void) viewDidDisappear:(BOOL)animated{
self.svcontent.segmentedControl = nil;
}
這樣整個程序就完美運(yùn)行了!
ps: 后面為了寫本文重新寫了個簡單項(xiàng)目, 發(fā)現(xiàn)有崩潰日志了,也是囧! 日志如下:
原因與我們推測是一樣的, 當(dāng)然還是使用上述解決辦法!
問題二
當(dāng)XLFormViewController
的view
嵌套僅scrollview
中時(shí) ,我們發(fā)現(xiàn)XLFormRowDescriptorTypeSelectorPush
類型的行不能彈出選項(xiàng)了. 原因我們很容易知道, 因?yàn)樗獜棾龅氖且粋€新的窗口, 而原始的XLFormViewController
并不在管理當(dāng)前window. 當(dāng)我們將行類型其換成XLFormRowDescriptorTypeSelectorAlertView
就能夠正常顯示了.
但我們同時(shí)又面臨新的問題, 彈出的 "取消" 按鈕是英文的.
使用XLFormRowDescriptorTypeSelectorAlertView
在整個工程路徑中搜索, 發(fā)現(xiàn)XLFormSelectorCell.m
文件中有NSLocalizedString(@"Cancel", nil)]
的代碼, 于是我們確信通過適配多語言可以修改XLFrom英文.
參考: 多語言適配