2013-10-24 113 views
2

我有來自服務器的JSON響應,並且存在格式1 = true,0 = false的bool變量。無法處理@「1」

在我的代碼我這樣做:

我第一次嘗試:

NSString *bolean=[dict objectForKey:@"featured"]; 
    if ([bolean isEqualToString:@"1"]) // here application fails... 
    { 
     BOOL *a=[bolean boolValue]; 
     [newPasaka setFeatured:a]; 
    } 
    else 
    { 
     BOOL *a=[bolean boolValue]; 
     [newPasaka setFeatured:a]; 
    } 

我的第二次嘗試:

這認爲1 = NO,0 = NULL

NSString *bolean=[dict objectForKey:@"featured"]; 
    if ([bolean boolValue]) //if true (1) 
    { 
     BOOL *a=[bolean boolValue]; 
     [newPasaka setFeatured:a]; 
    } 
    else //if false (0) 
    { 
     BOOL *a=[bolean boolValue]; 
     [newPasaka setFeatured:a]; 
    } 

如何解決此問題?

而我的班級也處理這個瘋狂..當我設置功能到YES - 它設置NO。當我設置NO - 它集null.

這裏是我的類:

* .h

@property BOOL *featured; 

* .m

@synthesize featured; 
+0

我想這是唯一的例子代碼,但我喜歡看這樣的東西'如果(測試){DoSomething的; } else {doSomething; }' – Cyrille

+0

這是非常奇怪的使用指針BOOL – HereTrix

回答

4

更改此財產 -

@property BOOL *featured; 

TO

@property (assign) BOOL featured; 

BOOL是基本數據類型,並且不能被直接創建爲一個對象。但是,如果您需要將其用作對象,請將其包裝在基礎類中,如NSNumberNSString。這樣的 -

NSNumber *featuredObject = [NSNumber numberWithBool:featured]; 

,並取回這樣的價值 -

BOOL featured = [featuredObject boolValue]; 

困惑布爾VS BOOL?閱讀here

+0

雖然這是正確的,請解釋_why_這是解決方案(以及代碼中的'BOOL * a'也需要更改)。 – DarkDust

+0

@Dharmbir Choudhary:你的編輯不正確。請回復它。 – DarkDust

+0

@DarkDust對不起,我錯了。 –

3

BOOL是不是一類,是

BOOL a = [bolean boolValue]; 

BOOL *a = [bolean boolValue]; // this is wront 
使用JSON

反正該值應rapresented爲數字,而不是字符串,除非API你正在處理原始類型與,強制該值是一個字符串。把一個斷點在objectForKey後在控制檯打印類「bolean」的對象:

po [bolean class] 

所以你肯定你正在處理的對象的類型,然後在一些情況下(如應該是)只使用[布爾boolValue]

0

BOOL是原始類型,所以你不需要使用指針。

更改此屬性從

@property BOOL *featured; 

@property BOOL featured; 

然後,你需要替換此代碼:

NSString *bolean=[dict objectForKey:@"featured"]; 
    if ([bolean isEqualToString:@"1"]) // here application fails... 
    { 
     BOOL *a=[bolean boolValue]; 
     [newPasaka setFeatured:a]; 
    } 
    else 
    { 
     BOOL *a=[bolean boolValue]; 
     [newPasaka setFeatured:a]; 
    } 

與此:

NSString *bolean=[dict objectForKey:@"featured"]; 
[newPasaka setFeatured:[boolean boolValue]] 

它大大簡化和工程罰款

0

你可以做另一種方式是已經修改如下: -

@property (assign) Bool featured; 
NSString *bolean=[dict objectForKey:@"featured"]; 
Bool yourBoolValue=[bolean boolValue]; 
    if (yourBoolValue==1]) // here if (true) 
    { 
     Bool a=yourBoolValue; 
     [newPasaka setFeatured:a]; 
    } 
    else//if (false) 
    { 
     Bool a=yourBoolValue; 
     [newPasaka setFeatured:a]; 
    } 
+0

'Bool'在Objective-C中不是有效的類型。無論是「bool」還是「BOOL」。此外,你不檢查'1',而是檢查'YES'或者'true'(或者根本不檢查,因爲'if(yourBoolValue)'就足夠了)。 – DarkDust

+0

@DarkDust,謝謝:)糾正我沒有注意到 –

0

假設dict是反序列化JSON對象,並且布爾值表示爲JSON數量(0或1),那麼你得到一個布爾值如下:

BOOL isFeatured = [dict[@"featured"] boolValue]; 

或者你的代碼可以寫爲:

[newPasaka setFeatured:[dict[@"featured"] boolValue]]; 

或利用阿肖克的更正財產申報:

newPaska.featured = [dict[@"featured"] boolValue]; 

;)