前言:
可能我还没有掌握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英文.
参考: 多语言适配