项目中曾经遇到过的问题整理

分类

UILabel标签控件
UISearchBar搜索条
UIAlertController警告框
UIPickerView选择器
UITableView表视图控件
UICollectionView集合视图
UIWebView或WKWebView网页视图
XIB布局
Common待分类
第三方

UILabel标签控件

文字显示异常(AttributedTitle副标题)
  • 出现场景
    常规状态下单个Label的使用并不容易出现此类问题。
    但是如果在XIB创建的TableViewCell文件中根据多种条件进行富文本设置时便非常容易出错。
    例:某一按钮设置了Title以及AttributedTitle,由于优先级后者要高于前者,故在TableView刷新时可能会因此造成文本显示不正常。
  • 解决方法
    如果需要进行富文本操作,设置按钮的AttributedTitle属性,不妨统一设置其他按钮的Title时,使用AttributedTitle来进行统一设置,规避问题的出现。

UISearchBar搜索条

搜索条清空时响应编辑完毕方法不及时
  • 出现场景
    为满足一般搜索栏改变文字,实时刷新文字或搜索的数据源时。
    在searchBar:textDidChange:中直接进行键盘的收起,增加清除按钮,却发现点击后键盘未收起。
  • 解决方法
    需要使用方法选择器(SEL)在另一个方法中进行键盘收起才可行,具体原因不清楚。

UIAlertController提醒框

子类化提醒框弹出失败
  • 出现场景
    为了方便起见,我们通过自定义API对提醒框进行子类化操作,并且默认以当前视图的导航控制器或者视图控制器进行弹出。
    当在进行网络异步请求时同时进行了页面的返回,即调用了popViewController:方法。
    此时由于视图被释放,弹出模态视图方法不可用。
  • 解决方法
    暂无。

UIPickerView滚轮视图

崩溃
  • 出现场景
    应用滚轮视图为自定义日期选择器,而不是用UIDatePicker时。
    针对日期编辑,若所设定日期格式与日期选择器格式不匹配时,调用弹出即崩溃。
  • 解决方法
    增加调用的容错判断,若对应数据源数据为空值或不符合格式,默认弹出当天日历;若不为空值且符合格式,则根据指定格式进行日期转换,并弹出指定日期日历。
键盘遮挡
  • 出现场景
    以UIPickerView子类化为日期选择器为例,调用UIPickerView进行视图呼出的同时,调整视图位置。
    若将光标焦点转移到另一个可输入框时,该UIPickerView不会被收起,而被键盘视图遮挡。
  • 解决方法
    将子类化的UIPickerView的WindowLevel提高,此时由于优先级问题,则UIPickerView会类同UIAlertController,位于视图的最顶端进行展示。
2017.8.11 
设置UIPickerView为对应录入框的inputView属性,如textField的inputView。
通过替换原有键盘视图来保证其弹出不被遮挡。

UITableView表视图控件

崩溃闪退(数据源问题)
  • 出现场景
    通常我们使用XIB创建UITableViewCell时,会通过封装已有数据的模型进行展示。
    当网络请求返回的JSON数据封装为模型时,如果模型字典的取值不匹配活着返回空值,可能造成类似Label等控件由于使用text属性,但是text为nil无法进行布局而崩溃。
  • 解决方法
    • 使用第三方来进行规避,如NullSafe框架。(不需要进行过多操作)
    • 为相关类进行延展,进行容错判断。(方便对产生错误数据进行定位)
    • 界面显示之前进行判断,追加缺省值。(方便对产生错误数据进行定位)
单元格副标题不显示(detailText副标题)
  • 出现场景
    当使用默认的单元格进行设置时,如果直接进行UITableViewCell的注册,设置detailText不生效或者说不显示detailText。
  • 解决方法
    • 使用XIB创建TableViewCell,进行自定义布局。
    • 使用initWithStyle:reuseIdentifier:方法完成TableViewCell的创建。
XIB创建的头视图或尾视图的背景色设置
  • 出现场景
    如果是使用XIB创建的TableHeaderFooterVIew,直接进行对应View的背景色设置无效。
  • 解决方法
    如果使用XIB创建组头或组尾时,需额外创建背景视图用于背景色设置,此问题也许是因为UITableHeaderFooterView的图层中本身存在一个ContentView。
    (可通过模拟器Debug View Hierarchy,即调试台上的图层关系进行查看)
滚动时收起键盘
  • 出现场景
    使用了ScrollView的keyboardDismissMode属性, 当设定为UIScrollViewKeyboardDismissModeOnDrag时,能满足滚动时收起弹出键盘的需求。
    但是在调试台区域会打印相关信息。

[UIWindow endDisablingInterfaceAutorotationAnimated:] called on <UITextEffectsWindow: 0x7fc791c28a80; frame = (0 0; 375 667); opaque = NO; autoresize = W+H; layer = <UIWindowLayer: 0x7fc791c290a0>> without matching -beginDisablingInterfaceAutorotation. Ignoring.

  • 解决方法
    如调试台打印结果最后一句,忽略即可。
TableView自动计算Cell高度
  • 出现场景
    对Cell设置自动计算高度时,在layoutSubviews里进行多行文字的设置,可能会出现设置后自动计算高度无效。
  • 解决方法
    若存在使用数据模型来完成Cell展示时,可以将多行文字的设置放在模型的set方法中完成,此时可以保证自动计算高度生效。
    如果预估高度与实际高度相差很大,不建议使用自动计算高度的方法,可能会造成跳闪的效果。
2017.8.11 
可以在模型中增设计算文字高度的只读属性,根据对应需要设置多行文字的内容进行预处理。
这也能保证表视图在进行布局时,减少计算高度产生的消耗。
TableView嵌套问题
  • 出现场景
    当存在嵌套关系时,即Cell中嵌套TableView时,常常需要进行数据源赋值。
    由于调用UI刷新的时机不确定,又不能保证实时赋予数据源时会刷新该Cell,便会造成滚动父TableView时,子TableView显示不正确的问题。
  • 解决方法
    由于存在子TableView,需要在父Cell中进行子TableView数据源的刷新。
    故在需要父Cell中进行子TableView的数据源刷新时,即在主线程进行UI刷新才能保证使用时不产生问题,
键入数据型控件数据丢失
  • 出现场景
    XIB创建的Cell包含UITextField、UITextView时,若处于编辑状态时,视图被进行上下滚动,此时的Cell调用原有数据源进行文字设置,产生了刚录入数据被刷新清空,或者恢复原状的情况。
  • 解决方法
    可使用在本地利用创建临时表单, 进行键值配对, 在编辑完毕的时候进行值更新, 在加载的时候从临时表单中取值。
2017.8.11 
在每次录入操作时,进行原数据源的修改。
如传入模型数组,修改指定模型的相关值便能保证某一单元格重新可见时显示正确。
XIB创建UITableView时的数据问题
  • 出现场景
    在XIB中使用了UITableView,并且用代码设置了数据源以及代理对象,相关数据依旧不显示。
  • 解决方法
    在使用XIB时,除了设置数据源以及代理对象外,还需要在源文件进行数据源与代理方法的设定。
XIB创建UITableViewCell (2017.8.11)
  • 出现场景
    控件约束不足,不能决定视图展示。

Warning once only: Detected a case where constraints ambiguously suggest a height of zero for a tableview cell's content view. We're considering the collapse unintentional and using standard height instead.

  • 解决方法
    检查是否有设置表视图的相关高度, 如果使用自适应高度, 检查单元格是否具备约束保证至少单元格有不等于0的高度。

  • 出现场景
    UIScrollView的内容高度不确定,即未设置contentView尺寸。

warning: Ambiguous Layout: Scrollable content size is ambiguous for "Scroll View

  • 解决方法
    有关于一切在xib中使用scrollView时产生的任何包含ambiguous(即模凌两可的尺寸),均可以通过给scrollView设置一个子View作为ContentView, 设置其上下左右约束与父视图对齐, 设置一个高度或者宽度以便确定尺寸, 之后在源文件中对高度或者宽度进行调整, 即可确定可滚动区域的尺寸。任何需要展示在scrollView的自定义视图, 一律添加在ContentView上即可。

UICollectionView集合视图

屏幕旋转后样式问题
  • 出现场景
    由于iPad开发时,常常需要项目能进行多角度旋转。若当前屏幕旋转方向为横屏后,进入下一级以UICollectionVIew为主页面时正常,此时再进行旋转为竖屏后会发生样式错乱。
  • 解决方法
    使用[UIScreen MainScreen].bounds.size来约束相关视图的宽高时,本身存在缺陷。
    不如使用XIB进行全局布局, 或增加各个Cell的图形约束。

UIWebView或WKWebView网页视图

断点调试
  • 出现场景
    当打断点进行网页调试时,若超过10秒则会出现以下提示字样。

void SendDelegateMessage(NSInvocation *): delegate (webView:decidePolicyForNavigationAction:request:frame:decisionListener:) failed to return after waiting 10 seconds. main run loop mode: kCFRunLoopDefaultMode

  • 解决办法
    暂无。真机独立操作时,一般不会产生此类超时问题。
视图出现黑边
  • 出现场景
    不定期出现。
  • 解决方法
    这是由于UIWebView的自身特性所决定, 无其他问题, 如果想要进行变更, 设定UIWebView的背景色或者设置其ScrollView的背景色。
2017.8.11 
页面出现黑边可能是因为某些控件或者布局加载时间过长,黑边是作为占位空间的存在。

XIB布局

文字出现丢失或溢出
  • 出现场景
    使用XIB进行布局的时候,以TableViewCell为例。
    设置两个文本控件,第一控件为多行文字,第二控件位于第一控件底部的右侧,此时让TableVIiew使用自动计算Cell高度,且追加了第二控件对第一控件的头部约束。
    如果此时第一控件文字大于两行, 文本便会造成第一文本溢出屏幕的情况。
  • 解决方法
    • 将第二文本控件的宽度设为与第一控件相同。
    • 增加约束条件固定第二控件位置。
      猜想XIB控件的约束也许是自左向右进行的。
Xcode8. 0更新后针对iOS10. 0以下的XIB出现问题
  • 出现场景
    更新Xcode8.0以后,XIB文件的XML布局信息发生改变,在针对版本10.0以下的系统时会存在问题,即在XIB上对视图进行属性设置。
    以为XIB文件按钮添加圆角属性,页面加载完毕以后,在10.0以下的系统会造成“真机调试”崩溃。
  • 解决方法
    使用代码进行此类属性设置,规避在XIB文件直接进行属性的设置,避免存在协作开发时,其他成员使用低版本Xcode问题。

调试台输出

真机第三方软件
  • 出现场景
    使用键盘调用搜狗键盘时,搜狗基础键盘不可用?

plugin com.sogou.sogouinput.basekeyboard invalidated

  • 解决方法
    暂无。
系统类
  • 出现场景
    未知,也许因为超出内存。

CLTilesManagerClient: initialize, sSharedTilesManagerClient.
CLTilesManagerClient: init
CLTilesManagerClient: reconnecting, 0x13f5b3850
CLTilesManagerClient: XPC_ERROR_CONNECTION_INVALID!

  • 解决方法
    暂无。
内存泄漏?
  • 出现场景
    极少出现,在项目中未重现。故从网上搜索时,发现持多种观点,有直截了当说死循环造成的;有说初始化页面时间过长造成的;还有测试说在iPod touch9.3.3运行基于8.0系统的项目,但是SDK是10.0的时候;AFNetworking有内存泄漏造成的问题。

warning: could not load any Objective-C class information. This will significantly reduce the quality of type information available.

  • 解决方法
    暂无。未完全了解问题所在。
动画开启关闭不匹配
  • 出现场景
    发生该问题主要因为存在上一项动画未结束时开启下一项动画。

Unbalanced calls to begin/end appearance transitions for <QLRemotePreviewContentController: 0x7fbd219c7000>.

  • 解决方法
    对即将开启的新动画进行异步处理, 或者进行延时展示处理。
触摸次数超出上限 (2017.8.11)
  • 出现场景
    设备接收的触摸事件在短时间内超负荷便会产生该提示。

Failed to receive system gesture state notification before next touch

  • 解决方法
    短时的触摸事件数量超出了触摸识别器的负荷引发此问题。解决办法自然是,别一直戳戳戳!

第三方

AFNetWorking3. 0版本内存泄漏问题
  • 出现场景
    所有使用到AFHTTPSessionManager相关API时均会产生该问题。
  • 解决方法
    使用自封装的网络请求。
AFNetWorking请求后返回的数据不正确
  • 出现场景
    进行网络请求访问时, 返回的数据为空或格式不正确。
  • 解决方法
    存在多种可能方式产生此类问题:
    • 响应头解析方式未设置。
    • 数据格式解析失败。
    • 后台返回数据存在特殊字符,如在JSON数据中嵌套了换行符、空格符、在iOS下需要对其进行过滤替换,将"/r"变成"//r"才可正常使用。
    • 使用数组或者字典进行数据存储失败, 后台服务器的JSON数据可能是一串字符串,直接进行对应系统的解码方式解码即可。

Stuff杂类

返回手势造成页面卡死
  • 出现场景
    当在ViewWillAppear的方法中进行网络请求,并且在发起请求时开启动画, 例风火轮的转动,结束时停止风火轮转动并隐藏的操作。
    在使用右滑手势进行返回的时候,会由于出现部分界面导致调用到ViewWillAppear,此时风火轮的隐藏失败,而如果该风火轮是应用在级别比较高的视图中,其弹出时其他控件不响应操作,便会造成整个页面假死的状态。
  • 解决方法
    在ViewDidLoad中进行网络请求,但由于视图出现以后才进行相关设置,可能会造成页面显示延迟。
切换短信界面显示不正确问题
  • 出现场景
    使用openURL:options:completionHandler:方法时,传入打开短信的URLScheme,即"sms://相关号码",此时打开短信面板,点击取消可以返回到正常短信面板继续操作。
    但是如果未点击取消操作,重新返回App中进行短信请求的发起,此时相关号码打开短信面板会显示未知用户,且点击取消后仅收起键盘,不可正常切回短信面板继续操作。
  • 解决方法
    暂无。



链接:http://www.jianshu.com/p/f2939a539281

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值