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

来源:互联网 发布:flash制作软件for mac 编辑:程序博客网 时间:2024/06/06 23:18

猫猫分享,必须精品

原创文章,欢迎转载。转载请注明:翟乃玉的博客
地址:http://blog.csdn.net/u013357243

问题

项目遇到了个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 然后看他到底是不是数组类型的,反正如果以后碰到类似的比如字典啊 字符串啊也可以试试,至于内部原理什么的猫猫猜测了一些,这里就不乱说了,有懂得希望能赐教下,不胜感激!

2 0
原创粉丝点击