2013-05-03 34 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}; 
相关问题