/ / Защо не работи някой обект с шрифт NSDictionary? - ios, цел-c, ios6, nsdictionary

Защо не работи някой обект с шрифт NSDictionary? - ios, цел-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];

Имате ли представа защо се случва това?

Отговори:

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