2013-02-02 35 views
6

當我收到來自JSON的PHP然後我得到問題的__NSCFBoolean isEqualToString值:__NSCFBoolean isEqualToString:]:無法識別的選擇發送到實例

我的代碼如下:

- (void)connectionDidFinishLoading:(NSURLConnection *)connection { 
     //convert to JSON 
     for(id key in res) { 
     id value = [res objectForKey:key]; 

     NSString *keyAsString = (NSString *)key; 
     NSString *valueAsString = (NSString *)value; 
     //NSCFBoolean 
     /*if([value isKindOfClass:[NSNumber class]]) 
     { 
      printf("Number"); 
     } 
     else if([value isKindOfClass:[NSString class]]) 
     { 
      printf("String --- \n"); 
      if([value isEqualToString:@"0"]) 
      { 
       printf("Wrong \n"); 
      } 
      else 
      { 
       printf("Right \n"); 
      } 
     }*/ 
     NSLog(@"%@",[valueAsString class]); 
     if([keyAsString isEqualToString:@"success"]) 
     { 
      printf("Working \n"); 
     } 
     else 
     { 
      printf("Not Working\n"); 
     } 
     //Error is in below line 
     if([valueAsString isEqualToString:@"0"])// strcmp([value objCType], @encode(BOOL)) == 1) 
     { 
      [self loginSuccess]; 
     } 
     else if(strcmp([value objCType], @encode(BOOL)) == 0) 
     { 
      [self loginFailure]; 
     } 
     NSLog(@"key: %@", keyAsString); 
     NSLog(@"value: %@", valueAsString); 
    } 

} }

獲得[__NSCFBoolean isEqualToString:]:的問題無法識別的選擇發送到實例0x1dc9964

Searchi Google從昨天開始處理這個問題,但還沒有解決方案。現在,NSCFBoolean在iOS 6.0中也不可用。那麼我能做些什麼來檢查JSON字符串中的「0」或「1」?請幫忙。

回答

17

value是一個NSNumber的對象(__NSCFBoolean,因爲NSNumber的是一類集羣),而不是一個字符串!使用[value boolValue]來確定它是0還是1.

投射對象不會改變它的類型!

+0

我也試過一樣,但沒有工作。 :( – VarunJi

+4

'[valueAsString isEqualToString:@「0」]''[value boolValue] == 0' –

+2

'[value boolValue] == NO'會更好,'![value boolValue]'最好 –

0

這裏是可疑的部分:

if([keyAsString isEqualToString:@"success"] && [valueAsString isEqualToString:@"0"]) 
{ 
} 

無論keyAsString,valueAsString(大概是這樣的一個),或兩者都不字符串對象。爲什麼?我們無法從您的代碼中知道這一點,可能您的JSON數據有問題。請給我們更多的代碼。

編輯

試試這個:

if([keyAsString isEqualToString:@"success"] && [valueAsString isEqualToNumber:@(NO)]) 
{ 
} 
+0

keyAsString很好,但valueAsString不起作用。剛剛檢查 – VarunJi

+0

打印它的類是這樣的:NSLog(@「%@」,[valueAsString class]);它肯定是__NSCFBoolean。 –

+0

是它的__NSCFBoolean。現在如何使這個工作? – VarunJi

相關問題