2012-03-04 24 views
1

我有一個NSDictionary包含從json數據轉換的數據,如{"message_id":21}。 然後我用NSNumber *message_id = [dictionary valueForKey:@"message_id"]來獲取數據。什麼是真正的類型? NSString或NSNumber

但是當我使用這個message_id

Message *message = [NSEntityDescription .... 
message.messageId = message_id; 

我得到的運行時錯誤,分配_NSCFString到的NSNumber

,所以我必須使用NSNumberFormatter做轉換。

NSString *messageId = [dictionary valueForKey:@"message_id"]; 
NSNumberFormatter * f = [[NSNumberFormatter alloc] init]; 
[f setNumberStyle:NSNumberFormatterNoStyle]; 
message.messageId = [f numberFromString:messageId]; 

此代碼有效。

,但是當我調試,我看到的

NSNumber *message_id = [dictionary valueForKey:@"message_id"] 

message_id有一個有效值,21

任何人都可以看到這裏的問題?

+0

讓我們看到'Message'的'messageId'屬性的聲明。 – FluffulousChimp 2012-03-04 11:22:55

+0

@property(nonatomic,retain)NSNumber * messageId; – fengd 2012-03-04 12:41:12

回答

3

您正試圖將NSString保存爲NSNumber。如果你想把它當作一個NSNumber你可以這樣做:

NSNumber *message_id = [NSNumber numberWithInt:[[dictionary valueForKey:@"message_id"] intValue]]; 

這應該解決您的問題。

+0

這個有什麼問題? NSNumber * message_id = [dictionary valueForKey:@「message_id」],變量message_id的值是有效的 – fengd 2012-03-04 12:42:09

+0

我不能說這是行不通的,因爲我不知道字典中的值。但我的猜測是它返回一個NSString對象。這會導致錯誤。 – Nic 2012-03-04 13:15:42

+0

該字典包含關鍵字「message_id」的值「21」。它由JSONKit從json字符串生成{「message_id」:「21」} – fengd 2012-03-04 13:44:09

1

您使用什麼庫來進行轉換? {「message_id」:21}表示值爲21的NSNumber應作爲NSNumber返回,{「message_id」:「21」}應將其作爲NSString返回。

使用數字格式化是完全矯枉過正。使用「integerValue」方法可以很好地處理NSString *和NSNumber * - 無論對象是NSString還是NSNumber,您都將得到整數21。如果您的對象 NSNumber而不是NSString,格式化程序代碼顯然會遇到麻煩。所以:message.messageId = [[NSNumber numberWithInteger:[messageId integerValue]];

我的類別可能添加到NSDictionary中

  • (NSNumber的*)nsIntegerNumberForKey:(的NSString *)鍵

負責處理其中的關鍵是不存在的情況下,或者在value是一個空值或一個字典或數組,因此您可以在任何需要使用JSON文檔中的整數值的NSNumber的地方使用它,並在任何地方進行錯誤檢查。

0

這裏閱讀SAVING JSON TO CORE DATAJSON official page

JSON標準是有關如何從 numbers-基本上串由引號和數字環繞區分字符串很清楚是 沒有。但是,JSON Web服務並不總是符合這個要求。即使是這樣,它們從一個記錄到另一個記錄並不總是一致的。

所以,如果你有收到的NSNumber地方的NSString是首選,你必須檢查並修復自己