2013-05-03 36 views
1

在iOS 6中,我可以做到這一點:爲什麼某些對象不能用NSDictionary簡寫工作?

NSDictionary *d = @{anObject : "key"}; 

但很顯然,當對象是一個UIImageView或UIWebView中(或者其他也行),它與崩潰:

'NSInvalidArgumentException', reason: '-[UIWebView copyWithZone:]: unrecognized selector sent 

更改字典聲明舊的方式工作:

NSDictionary *d = [NSDictionary dictionaryWithObjectsAndKeys:anObject,@"key", nil]; 

任何想法爲什麼發生這種情況?

+0

閱讀並理解異常消息很有用。 – 2013-05-03 14:10:07

回答

10

語法

NSDictionary *d = @{<key> : <value>, ...}; 

你的情況:

NSDictionary *d = @{@"key" : anObject}; 

所以你的代碼試圖利用anObject關鍵UIWebView失敗,因爲密鑰必須 符合NSCopying協議。

+0

非常感謝。由於舊的dictionaryWithObjectAndKeys,我總是把它們弄混了。 – 2013-05-03 14:21:37

+1

@EnricoSusatyo:是的,這很容易混淆。但請注意,Xcode自動完成有助於:如果您鍵入'@ {'它已完成到'@ {}'。 – 2013-05-03 14:25:31

2

這是因爲新的語法預計鍵值,以反向排序,比較dictionaryWithObjectsAndKeys

NSDictionary *d = @{ @"key" : anObject}; 

另外,不要在NSString文字前面忘記@跡象。

2

重點首先,價值第二。

NSDictionary *d = @{@"key" : nObject}; 
相關問題