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