美文网首页
iOS开发遇到Crash: [__NSArrayM object

iOS开发遇到Crash: [__NSArrayM object

作者: 麦子_KB | 来源:发表于2018-01-24 18:10 被阅读242次

    前言:相对于有一定开发经验的猿,这样的奔溃是比较好定位和解决的。

    • 问题复现:当我写了这样一段代码时运行时
    NSArray *name = @[@"kobe",@"rose",@"jack"];
    NSDictionary *dict = @{@"name":name, @"wilson":@"8"};
    
    // 有时候后台会告诉我们,我这里会给你返回一个字典,你尽管这么取值就好了。但实际却并不是这样😔
    NSDictionary *testDict = dict[@"name"];
    NSString *test = testDict[@"testName"];
    NSLog(@"%@",test);
    
    // 奔溃日志
    [__NSArrayI objectForKeyedSubscript:]: unrecognized selector sent to instance 0x60000024fb40
    Terminating app due to uncaught exception 'NSInvalidArgumentException'
    reason: '-[__NSArrayI objectForKeyedSubscript:]: unrecognized selector sent to instance 0x60000024fb40'
    
    

    从日志我们得到,对一个数组使用了objectForKeye方式取值,编译器识别不了,抛出异常。

    • 解决:需要做一层安全行判断:
    id testDict = dict[@"name"];
    if ([testDict isKindOfClass:[NSDictionary class]]) {
        NSString *test = testDict[@"testName"];
        NSLog(@"%@",test);
    }
    

    我们平时写代码时,需要注意对数据类型的判断,防止类似情况发生奔溃。在与后台协调好数据结构的前提下,还需要尽可能做一些安全性测试,比如数组或字典为空会不会崩溃?这都需要大量的代码积累,开发之路路漫漫兮。

    相关文章

      网友评论

          本文标题:iOS开发遇到Crash: [__NSArrayM object

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