华山论剑之iOS错误日志

来源:互联网 时间:2017-01-21





日志来源
前两个月一直在做项目,在项目遇到过不少以前没有遇到过的错误日志,这里就整理出来,分享一下那些年我掉进去的坑.




全部日志

this class is not key value coding-compliant for the key XXX错误


" this class is not key value coding-compliant for the key digitPressed.' "的错误,经过一番搜索和排查发现是自己在设置IBAction和IBOutlet时有多余的连线,按下ctrl键检查控件的连接将多余的连续删除后程序正常运行。

Unable to add App ID because the '10' App ID limit in '7' days has been exceeded.


字面意思是7天内不能增加10个以上appid
我们都知道Xcode7增加了自动生成iOS免费调试证书的功能,但是问题在于每次调试不同的iOS工程,不同的bundle id,都会占用一个appid,profile文件和证书文件,这就造成了,资源冗余,并且苹果没有提供管理这些证书,appid的管理面板.
错误原因:

最大的可能就是,苹果的新规则,7天之内不能创建超过10个appid

苹果出问题了 锁定了大部分正常的开发者账号

换 bundle ID 造成的

自动fix证书造成的。。建议手动生成证书下载安装

解决方案

如果都是新工程,使用一个固定的并且之前可以正常调试的bundle id,比如我的所有新建工程都是用的是org.skyfox.test

如果之前能调试换过bundle id不能调试,换回原有的bundle id即可

等7天再试。。虽然时间很长

致电苹果询问情况

建议

iOS开发者进行Xcode7真机调试的时候,使用固定的bundle id进行调试,比如我一直在使用org.skyfox.test进行调试,也是对那些生成乱七八糟证书,profile文件的一个技巧


7.3模拟器第一次启动出现的问题




解决方案: xcode7.3,每次开机第一次必定遇到这个情况,在运行就正常了,

reason: '-[__NSCFNumber length]: unrecognized selector sent to instance 0x8b3c310’


这个问题的原因是因为解析json数据时候把整形当成字符型存储到model中取出来用的时候,直接会崩溃.


* Terminating app due to uncaught exception ‘NSGenericException’, reason: ‘* Collection <__NSArrayM: 0xb550c30> was mutated while being enumerated.’


这个问题的原因是因为我们一边遍历数组一边对数组中的元素进行修改.导致的崩溃

问题缘由:DTAssetProviderService could not start DTXConnection with Simulator 'iPhone 6s Plus'. Check the system log for errors




图片说明

解决方案: 重启模拟器,重启Xcode,重启mac机器

错误日志:'Supported orientations has no common orientation with the application, and [UIAlertController shouldAutorotate] is returning YES'


图片:


解决方案: 查看一下,项目是否支持,设置的方向,就可以解决了

解决方案示意.png

错误日志: -[__NSCFNumber rangeOfCharacterFromSet:]: unrecognized selector sent to instance



错误日志

问题分析及解决方案: 这个是由于传的参数类型不对所导致,这里其实是要传NSString类型,而其实返回的是NSArray类型,这个错误不会立即出发,而是过一段时间再出发,所以不好定位。
[cell setColumnTitle:[homeData objectAtIndex:row]];


错误日志:'-[__NSArrayM objectForKeyedSubscript:]: unrecognized selector sent to instance 0x7fd0195d53d0'




错误日志

问题分析及解决方案:这个是因为你在做解析的过程当中,你写的代码认为 JSON 反序列化到对象 (词典),但事实上它进行反序列化到一个包含一个对象的数组。如下
 NSMutableArray *topLevelArray = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil]; 
NSDictionary *dict = topLevelArray[0];

如果您想要检查你的什么,你可以使用 isKindOfClass: 像这样:
id jso = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
if (jso == nil) {
// Error. You should probably have passed an NSError ** as the error
// argument so you could log it.
} else if ([jso isKindOfClass:[NSArray class]]) {
NSArray *array = jso;
// process array elements
} else if ([jso isKindOfClass:[NSDictionary class]]) {
NSDictionary *dict = jso;
// process dictionary elements
} else {
// Shouldn't happen unless you use the NSJSONReadingAllowFragments flag.
}


错误日志:'-[__NSCFConstantString countByEnumeratingWithState:objects:count:]: unrecognized selector sent to instance 0x108e14470'




错误日志

问题分析及解决方案:一个空指针(null,或者在OC里是NSNull)发送了countByEnumeratingWithState:objects:count:;所以解决方法,判断一下拿到的对象是不是NSNull类,如果是的话走另一套处理流程吧。

错误:The operation couldn’t be completed. (LaunchServicesError error 0.)



图片

解决办法:

第1种方法.点击当前的模拟器,点击IOS Simulator->Reset Content and Settings...->Reset,然后会重置模拟器,再编译代码可登录模拟器成功

第2种方法.点击Xcode->Product->Clean

第3种方法.将模拟器上的当前运行的app删除,再重新加载(长按模拟器的屏幕,点击当前报错的app 删除)

第4种方法.在info.plist文件中修改bundle的版本号我遇到的问题是上述几种方法只能暂时解决,当我一修改代码时,又重新报错,然后我把我项目里的那个Resources(就是存储图片的那个包)给删除了,然后重新建分组,但是资源包的名字不叫Resources,然后重新clean,结果问题解决了,我想原因可能是我的Resources与Xcode里冲突了,然后Xcode不能打包app到模拟器上吧


webView错误日志打印:Error Domain=WebKitErrorDomain Code=101 "(null)"


问题原因:因为URL不能有中文,符号,以及音标
解决方法 :用UFT8进行一下转码就好
urlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];


xCode出现 The operation couldn't be completed.(LaunchServicesError error 0.)错误修复


问题的出现
今天在利用XCode开发苹果APP时想使用脚本来存储一些语言文字信息,在完成环境配置和搭建以后调用Lua脚本成功。但是该Lua脚本把所有的内容都包含在一起,不太符合文件独立的要求,就把文件拆成了两部分,通过include之类的Lua关键字进行关联。调整完毕以后运行调试,出现了Lua引擎无法搜索到被包含的脚本的错误,于是就开始折腾了,一会用相对包含关系包含文件,一会又用文件引用方式使用文件,最终问题没有得到解决但是出了一个新问题


对比了工程版本修改记录也没发现问题原因,求助了万能的百度(吐啊吐啊~~~),结果没有找到答案。百无聊赖之下运行了下Clean然后在Build下,问题奇迹般的消失了!!!OMG!
分析原因
回忆了自己折腾时的步骤,基本定位在资源文件加载方式变化上引起该问题,导致编译的缓存数据中含有残留的无效数据。重新编译以后清空了错误数据,使得程序能够正常跑起来了。

invalid nib registered for identifier ((null)) - nib must contain exactly one top level object which must be a UITableViewCell instance


大致意思就是 这个nib的注册不合法, 这个nib必须只保含一个 object 并且是UITableViewCell 的实例,也就说你创建的cell的xib文件中有可能不单单只有cell,可能不小心拖了一个控件到xib上,都会出现问题,问题解决办法就是把多余的控件删除就好了.



结束
两月三项目,基本所有的奇葩问题都在这了, 今天就说到这了,谢谢查看.


相关阅读:
Top