В iOS 6 мога да направя това:
NSDictionary *d = @{anObject : "key"};
Но очевидно, когато обектът е UIImageView или UIWebView (или може би и други), той се срива с:
"NSInvalidArgumentException", reason: "-[UIWebView copyWithZone:]: unrecognized selector sent
Промяната на декларацията на речника по стария начин работи:
NSDictionary *d = [NSDictionary dictionaryWithObjectsAndKeys:anObject,@"key", nil];
Имате ли представа защо се случва това?
Отговори:
10 за отговор № 1Синтаксисът е
NSDictionary *d = @{<key> : <value>, ...};
Във вашия случай:
NSDictionary *d = @{@"key" : anObject};
Така че вашият код се опита да използва anObject
като ключ, Това не успя UIWebView
защото ключовете трябва отговарят на NSCopying
протокол.
2 за отговор № 2
Това се дължи на факта, че новият синтаксис очаква ключовете и стойностите да бъдат наредени обратно, в сравнение с dictionaryWithObjectsAndKeys
:
NSDictionary *d = @{ @"key" : anObject};
Също така, не забравяйте @
знак пред NSString
буквален.
2 за отговор № 3
Ключова първа, втора стойност.
NSDictionary *d = @{@"key" : nObject};