在iOS 6中,我可以这样做:
NSDictionary *d = @{anObject : "key"};
但显然当对象是UIImageView或UIWebView(或者也许是其他人)时,它会崩溃:
'NSInvalidArgumentException', reason: '-[UIWebView copyWithZone:]: unrecognized selector sent
将字典声明更改为旧方法有效:
NSDictionary *d = [NSDictionary dictionaryWithObjectsAndKeys:anObject,@"key", nil];
知道为什么会这样吗?
答案 0 :(得分:10)
语法是
NSDictionary *d = @{<key> : <value>, ...};
在你的情况下:
NSDictionary *d = @{@"key" : anObject};
因此,您的代码尝试使用anObject
作为键。 UIWebView
失败,因为密钥必须
符合NSCopying
协议。
答案 1 :(得分:2)
这是因为与dictionaryWithObjectsAndKeys
相比,新语法需要反向排序键和值:
NSDictionary *d = @{ @"key" : anObject};
另外,请不要忘记@
字面前的NSString
符号。
答案 2 :(得分:2)
键第一,价值第二。
NSDictionary *d = @{@"key" : nObject};