解決從服務器獲取的數組是 __NSCFConstantString以及""沒有空格字符串的問題

AJ分享,必須精品java

 

問題

項目遇到了個bug,從服務器獲取到的數據是這樣的
{
status = 1,
data = [
{
uid = 161,
type = 2,
id = 79,
addtime = 1447642148,
addtime_txt = 2,

}]
}android

看着挺抽象的,意思就是咱們訪問後返還的數據中有一個status, 一個data的放着一堆字典的數組,可是。。。可是就是可是,原本若是是下面數組裏沒有數據的狀況下,status的值會是0,然而判斷status == 0 或者是用字符串的isEqualToString方法都不行,反正就是不能行不能行的。數組

而且,當status = 0 的時候, 地下的data數組的值是」「這樣的一個字符串。。。。。。。 是的,沒有看錯,他是個字符串,我經過isa 還有強制轉換等獲得他的類型是 __NSCFConstantString 哦尼瑪賣糕的,這什麼鬼。。。而且這裏你要是用[data isEqualToString:@」「] 這樣判斷,當他是空的時候沒事,可是若是有值了就崩了,血崩,反過來,若是用別的方法,好比看他存在否,當沒有的時候 也就是他是」「這個鬼的時候也會蹦,很見鬼。ruby

解決

通過億萬個草泥馬略過,反正最後我是參考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猜想了一些,這裏就不亂說了,有懂得但願能賜教下,不勝感激!markdown

相關文章
相關標籤/搜索