Pregunta

Me puede establecer UIColor objetos como claves en un NSMutableDictionary todo el día y todo está bien y feliz ...

Por ejemplo:

[myDict setObject:foo forKey:[UIColor redColor]]; 

que funciona muy bien ... A menos trato de usar la siguiente:

UIColor *black = [[UIColor alloc] initWithRed:0 green:0 blue:0 alpha:1];
[myDict setObject:foo forKey:black];

Eso siempre me da:

- [UIDeviceRGBColor copyWithZone:]: selector no reconocido enviado a la instancia 0x691be80

Las razones de por qué estoy definiendo negro en el espacio de color RGB no son importantes a esta pregunta, sólo sé que debo definir de esa manera. Lo que no entiendo es por qué es esto y sólo este color me causando un problema, y ??por qué es que el error es un error copyWithZone?

Para el registro, [UIColor blackcolor] funciona como una llave, pero debido a que no es un espacio de color RGB que no es adecuado para mi aplicación.

¿Fue útil?

Solución

Parece que la mejor pregunta es "¿por qué todos los otros trabajos ejemplo UIColor como clave"?

Llaves en un NSMutableDictionary " debe cumplir con el protocolo NSCopying ". UIColor objetos no se ajustan a ese protocolo por la documentación , por lo que es teóricamente capaz de utilizarlos como claves en un diccionario.

En la práctica, podría adivinar que usted está recibiendo diversas subclases concretas de un grupo de clases que se esconde por UIColor, y tal vez algunos de ellos, de hecho, el apoyo NSCopying, pero UIDeviceRGBColor no parece.

Se puede envolver el objeto UIColor en un objeto envoltorio delgado que hizo apoyo NSCopying, y anular -isEqualTo: etc para conseguir las comparaciones con el trabajo correctamente, y luego usar esos envoltorios en el diccionario.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top