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