, je peux configurer des objets UIColor comme clés dans une NSMutableDictionary toute la journée et tout va bien et heureux ...problème lors de l'utilisation UIColor RGB noir comme une clé dans une NSMutableDictionary
Par exemple:
[myDict setObject:foo forKey:[UIColor redColor]];
Cela fonctionne très bien ... à moins que j'essaie d'utiliser ce qui suit:
UIColor *black = [[UIColor alloc] initWithRed:0 green:0 blue:0 alpha:1];
[myDict setObject:foo forKey:black];
Cela me donne toujours:
- [UIDeviceRGBColor copyWithZone]: sélecteur non reconnu envoyé à l'instance 0x691be80
Les raisons pour lesquelles je suis dans la définition de noir RVB ne sont pas importants colorspace à cette question, il suffit de savoir que je dois définir cette façon. Qu'est-ce que je ne comprends pas, c'est pourquoi cette couleur et cette seule cause me cause un problème, et pourquoi est-ce que l'erreur est une erreur copyWithZone? Pour l'anecdote, [UIColor blackColor] fonctionne comme une clé, mais comme il ne s'agit pas d'un espace colorimétrique RVB, il ne convient pas à mon application.
Oui, cela semble faire senese. Je me demande si vous pourriez implémenter copyWithZone dans votre propre catégorie UIDeviceRGBColor. –
Intéressant! Je n'ai pas pensé à vérifier puisque toutes les UIColors prédéfinies fonctionnent comme des clés ... Si j'avais une Catégorie, je devrais aussi redéfinir le hachage, n'est-ce pas? –
Ajout du code suivant dans une catégorie sur UIColor semble avoir résolu le problème: - (id) copyWithZone: (NSZone *) zone { \t CGColorRef cgcopy = CGColorCreateCopy ([self CGColor]); \t UIColor * copy = [[[self class] allocWithZone: zone] initWithCGColor: cgcopie]; \t Copie de retour; } –