• 解决从服务器获取的数组是 __NSCFConstantString以及""没有空格字符串的问题


    AJ分享,必须精品

    问题

    项目遇到了个bug,从服务器获取到的数据是这样的
    {
    status = 1,
    data = [
    {
    uid = 161,
    type = 2,
    id = 79,
    addtime = 1447642148,
    addtime_txt = 2,

    }]
    }

    看着挺抽象的,意思就是我们访问后返还的数据中有一个status, 一个data的放着一堆字典的数组,但是。。。但是就是但是,本来如果是下面数组里没有数据的情况下,status的值会是0,然而判断status == 0 或者是用字符串的isEqualToString方法都不行,反正就是不能行不能行的。

    并且,当status = 0 的时候, 地下的data数组的值是”“这样的一个字符串。。。。。。。 是的,没有看错,他是个字符串,我通过isa 还有强制转换等得到他的类型是 __NSCFConstantString 哦尼玛卖糕的,这什么鬼。。。并且这里你要是用[data isEqualToString:@”“] 这样判断,当他是空的时候没事,但是如果有值了就崩了,血崩,反过来,如果用别的方法,比如看他存在否,当没有的时候 也就是他是”“这个鬼的时候也会蹦,很见鬼。

    解决

    经过亿万个草泥马略过,反正最后我是参考android客户端兄弟的做法,直接判断数组的长度,但是这里有时候他不是数组 是__NSCFConstantString这个鬼。。。(人家java的数组如果不是数组类型啥的都会用空啥的东西表示,oc这表咋竟然就知道给我崩。。。血崩)

    NSArray *dataArr = Data[@"data"];
    
        NSLog(@"dataArr.class = %@", dataArr.class);
        if ([dataArr isKindOfClass:[NSArray class]]) {
            for (NSDictionary * dic in dataArr) {
                attentionTerraceModel * model=[[attentionTerraceModel alloc] initWithDic:dic];
                [_mary_data addObject:model];
            }
        }else {
            UIAlertView *aleat=[[UIAlertView alloc] initWithTitle:@"提醒" message:@"暂无关注信息" delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];
            [aleat show];
        }

    我是这样解决的,就是把它换成NSArray 然后看他到底是不是数组类型的,反正如果以后碰到类似的比如字典啊 字符串啊也可以试试,至于内部原理什么的AJ猜测了一些,这里就不乱说了,有懂得希望能赐教下,不胜感激!

  • 相关阅读:
    各大公司 Java 后端开发面试题总结
    java程序开发工具集的使用
    删数
    能量项链//区间DP
    合并傻子//区间dp
    P1005 采药
    表达式计算系列
    进制转换
    最长公共子序列
    乘法游戏
  • 原文地址:https://www.cnblogs.com/luolianxi/p/4990268.html
Copyright © 2020-2023  润新知