2012-10-10 58 views
3

最後一行總是拋出一個異常:「JSON字典中的無效鍵」。 我不知道爲什麼。我可以打印「msg」字典。JSON字典中的無效(非字符串)鍵

NSDictionary* header = @{ 
@(udpVersion) : @"ver", 
@(self.dataType) : @"type", 
@(self.ack) : @"ack", 
[WBUserMng sharedClient].getUserId : @"src", 
}; 

NSDictionary* msg = @{ 
header:@"head", 
self.payload:@"data", 
}; 

NSError* error = nil; 
return [NSJSONSerialization dataWithJSONObject:msg options:kNilOptions error:&error] 

回答

8

我想你的關鍵在字典文字的新目標C語法錯誤的順序。它應該可能是

NSDictionary* msg = @{ 
    @"head" : header, 
    @"data" : self.payload 
}; 

header字典相同。

+0

這個作品...非常感謝.... – sinopec

-1

第一次看到@ {}或@(self.dataType)指令。我不知道你如何編譯它。 給我們更多的提示。

NSDictionary* dic = [NSDictionary dictionaryWithObject: @"a" forKey: @"b"]; 

[NSJSONSerialization dataWithJSONObject: dic options: NSJSONWritingPrettyPrinted error: nil]; 

NSString* jsonString = @"{\"foo\": \"bar\", \"foo2\": \"bar2\"}"; 
// no commat one the last JSON line 
[NSJSONSerialization dataWithJSONObject: jsonString options: NSJSONWritingPrettyPrinted error: nil]; 
+0

xcode 4.5帶來的新功能。我真的正確地編譯這個。所以我不認爲這會是一個問題.... – sinopec

+0

好吧,我剛剛發現了這個新功能。什麼是self.dataType/self.ack簽名?順便說一下,如果你從[WBUserMng sharedClient] .getUserId或者其他任何對象得到一個null,就會拋出一個異常。你應該總是得到一個非零的關鍵對象 –

-1

即使我遇到了這個問題,它也可能出現在鍵不在NSString中時。