1

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

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

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

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

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

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

知道为什么会这样吗?

4

3 回答 3

11

语法是

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

在你的情况下:

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

所以你的代码试图anObject用作key。那失败了,UIWebView因为密钥必须符合NSCopying协议。

于 2013-05-03T14:08:54.170 回答
2

这是因为与以下相比,新语法要求键和值反向排序dictionaryWithObjectsAndKeys

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

另外,不要忘记文字@前面的符号。NSString

于 2013-05-03T14:09:11.830 回答
2

关键第一,价值第二。

NSDictionary *d = @{@"key" : nObject};
于 2013-05-03T14:09:37.937 回答