为什么有些对象不能与NSDictionary一起使用?

时间:2013-05-03 14:06:00

标签: ios objective-c ios6 nsdictionary

在iOS 6中,我可以这样做:

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

但显然当对象是UIImageView或UIWebView(或者也许是其他人)时,它会崩溃:

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

将字典声明更改为旧方法有效:

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

知道为什么会这样吗?

3 个答案:

答案 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};