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

由于问题设计分类较多,而简书中目录功能不可用,故在此标识分类,可以使用Command+F相关分类名,进行问题查找。

分类

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中进行短信请求的发起,此时相关号码打开短信面板会显示未知用户,且点击取消后仅收起键盘,不可正常切回短信面板继续操作。
  • 解决方法
    暂无。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,117评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,963评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,897评论 0 240
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,805评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,208评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,535评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,797评论 2 311
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,493评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,215评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,477评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,988评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,325评论 2 252
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,971评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,055评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,807评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,544评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,455评论 2 266

推荐阅读更多精彩内容