美文网首页其他iOS Dev.iOS Developer
iOS开发遇到的问题(二)

iOS开发遇到的问题(二)

作者: mokong | 来源:发表于2016-05-10 23:43 被阅读683次

    开发中遇到的问题,分享给大家,有则改之,无则加勉。

    1. UIScrollView加了category之后导致的手写输入时崩溃的问题—— [UIKBBlurredKeyView candidateList]

    上周更新的应用,这周上线了,然后昨天旁边的同事告诉我说,友盟上的崩溃信息,崩溃率1%点多了,赶紧查查吧。
    看了一下发现大部分的崩溃都是这个日志:[UIKBBlurredKeyView candidateList]: unrecognized selector sent to instance...,于是搜了一下

    崩溃重现:

    切换到有输入的地方,点击输入,切换输入法到手写输入法(系统的,第三方的没事),然后输入,输入一个之后,第二个字就会崩溃。

    原因:

    是因为给UIScrollView加了个category,是用于处理点击屏幕的事件的(触摸屏幕回收键盘),之前一直都是这么做的,也没问题,又或者又问题也没人反馈,😓,估计是投诉无门啊。。。。。而且我们测试的时候也没有测试手写输入法,因为没人会想到这还会有什么不同。苹果自己也没想到,所以我们就上线了,然后就有崩溃了。。。这坑爹的

    解决:

    既然有这个问题,就要解决,而且用了这个category之后,最坑的地方在于,即使你没有导入这个头文件,在其他输入的地方也有可能会跟这个冲突,从而崩溃。。。所以问题还是很严重地!!!
    解决的方法很简单,删掉这个category,换种方式实现回收键盘,具体参照这个博客[UIKBBlurredKeyView candidateList]: unrecognized selector sent to instance 0x177cc850,我就是这么改的。

    2. webView加载网页时出现了这个,NSURLConnection/CFURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9813)

    昨天给一个界面,新增一个入口,点击跳转一个网页,需要把登陆状态带到网页里,做好之后,今天提测,测试发现跳转的网页没问题,但是不能添加到购物车,点击网页下面标签中的个人中心没反应。。。

    定位原因:

    看看安卓的显示如何,是否能跳转,都正常。。。。。
    然后开始排查,
    a. 是不是登陆状态没有传到网页里;
    b. 是不是手机的问题,这个网址直接从浏览器能否打开
    这两个排除之后,没办法,
    c. 单步来打印,看看能够正常跳转的网址和不能跳转的有什么不一样。
    还真有不一样的地方,能够正常跳转的都是http的请求,而个人中心的本来也是http的,但是请求之后有一次重定向(自动跳转),到https的;然后就出问题了,走的webview加载失败的方法,打印的error是

    NSURLConnection/CFURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9813) 
    

    so,为什么呢,再看看这个https链接在浏览器里的状况,显示的是,证书过期不安全的链接。
    d. 百度,额,不要吵,确实是百度。。。。

    结论:

    是因为测试环境的证书好像是后台自己弄的,然后还过期了,于是就会有这个问题,

    解决方法:

    这个点解决方法有三种:
    一种是后台更新证书,找一个好的能被信任的证书放过来;
    第二种是客户端改代码,把不安全的这个给屏掉;但是最好能区分一下是上线还是测试,上线的时候把这些给去掉,要不这个https就没意义了。
    最后一种是,大家都不改,测试不要测这个了,反正线上是好的。。。。。😄
    不要问我用的哪种。。。。。

    如果客户端要修改的话,参考iOS UIWebView 加载https站点出现NSURLConnection/CFURLConnection HTTP load failed (kCFStreamE...这个,我没试啊,好像暴露了什么。。。

    相关文章

      网友评论

      • 搜捕儿:谢谢楼主, 第一个问题帮助我解决了,非常感谢
      • CoderLocus:如果没有ScrollView呢,也没写那三个方法 还是崩溃了
        leejunhui:@JingQL 我是在BaseViewController里面写了这段代码, 然后就出现了文中的闪退问题。
        - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
        {
        [super touchesBegan:touches withEvent:event];
        [self.view endEditing:YES];
        }
        CoderLocus:@翀鹰女孩 我写了一个scrollView的扩展,但没有使用,但也导致了原生手写崩溃,我把扩展里的三个方法注掉了
        翀鹰精灵:@JingQL 对 我也遇到了 请问你解决了吗?

      本文标题:iOS开发遇到的问题(二)

      本文链接:https://www.haomeiwen.com/subject/agiyrttx.html