61 votes

[UILabel copyWithZone:]: sélecteur non reconnu envoyé à une instance

Je me sens comme je suis cogner ma tête contre le mur ici (et je suis prêt à le faire, franchement).

Je suis en train de définir un arrière-plan de la vue. Fond de moi, il faut une image et je suis en utilisant ce code (qui fonctionne parfaitement bien dans les deux autres UIViewController sous-classes - c'était un copier/coller dans le nouveau fichier):

UIImage *img = [gameNode imageFromKey:@"background"];
UIColor *bg = [[UIColor alloc] initWithPatternImage:img];
self.view.backgroundColor = bg;
[bg release];

Comme je l'ai dit, cela fonctionne parfaitement bien dans deux autres endroits, cependant ici, à la ligne, self.view.backgroundColor = bg jette

'NSInvalidArgumentException', reason: '-[UILabel copyWithZone:]: unrecognized selector sent to instance 0x9259840'

Il n'y a pas beaucoup plus à passer par. J'ai vérifié dans de l'IB que la vue de premier niveau de référencement de sortie est définie pour le propriétaire du Fichier. J'ai nettoyé le projet et redémarré. J'ai même fermé Xcode et redémarré à nouveau, pas de chance. De quoi d'autre ai-je raté?

Edit: Comme je l'ai mentionné, il n'y a pas beaucoup de trace de pile, juste ceci:

2012-05-28 13:13:56.997 OOKL[36012:17303] -[UILabel copyWithZone:]: unrecognized selector sent to instance 0x92b79a0
2012-05-28 13:13:56.997 OOKL[36012:17303] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UILabel copyWithZone:]: unrecognized selector sent to instance 0x92b79a0'
*** First throw call stack:
(0x2933052 0x44c7d0a 0x2934ced 0x2899f00 0x2899ce2 0x2935bd9 0xaa92dd 0x6a4f40 0x6a4eeb 0x6bfd60 0xc0191a 0x2934e1a 0x289e821 0xc0046e 0xaa7e2c 0xaa83a9 0xaa85cb 0xb2b59 0xb1969 0x2934ec9 0x9e55c2 0x9e555a 0xa8ab76 0xa8b03f 0xa8a2fe 0xa0aa30 0xa0ac56 0x9f1384 0x9e4aa9 0x2ac6fa9 0x29071c5 0x286c022 0x286a90a 0x2869db4 0x2869ccb 0x2ac5879 0x2ac593e 0x9e2a9b 0x214d 0x20c5)

Rien d'autre - avant ou après.

197voto

Aleks G Points 25412

Je suppose que c'était l'un de ces étranges bugs avec XCode que vous ne pouvez pas laisser de trace ou de reproduire à chaque fois. J'ai réduit la question à un UILabel dans l'IB. Dès que je le connecte à un IBOutlet UILabel *, j'obtiens cette erreur.

Sur la poursuite de l'enquête, il s'avère que le nom de l' title a été à l'origine du problème. J'ai eu l'étiquette déclarée comme

IBOutlet UILabel *title;

Dès que j'ai changé le nom d' gtitle, tout a fonctionné comme prévu. Qui sait?..

0voto

Maulik Points 13234

Essaye ça :

 self.view.backgroundColor = [UIColor clearColor];
self.view.layer.backgroundColor = [[UIColor alloc] initWithPatternImage:img].CGColor;
 

0voto

apouche Points 2000

Cela ressemble fort à un "plus libéré" de l'émission.

La raison est difficile à dire dans votre exemple (puisque le code est absolument bien), mais le fait que vous êtes d'avoir un copyWithZone sélecteur envoyé sur une instance de UILabel (au lieu de UIColor) serait certainement me dire que l' bg a été libéré et est maintenant en se référant à un UILabel.

Vérifiez que plus tard dans le code que vous n'avez pas encore communiqué de l'objet bg.

Espérons que cette aide

EDIT APRÈS VOTRE PREMIER COMMENTAIRE

C'est assez bizarre que vous recevez un copyWithZone unrecognized selector sent to instance, parce que je crois que si votre self.view a été de type incorrect (pas un UIView) ensuite vous recevrez un setBackgroundColor unrecognized selector sent to instance et pas un copyWithZone.

Pour mieux analyser ce problème, lorsque l'exception est soulevée, je voudrais écrire dans le débogueur:

po [self view]
po [[self view] backgroundColor]

pour voir si tout c'est bien qu'il devrait être.

0voto

mafiOSo Points 74

ce problème m'est arrivé la nuit dernière et je n'avais vraiment avoir une étiquette de titre. J'ai déchiré un peu de mes cheveux lorsque vous modifiez le nom d'autre chose n'a pas fonctionné. Il s'avère que j'ai été de tenter d'envoyer une valeur NULLE à partir d'un champ de texte d'une étiquette à un VC. J'ai 4 VC et un utilisateur entre un titre à VC 1 dans le champ de texte qui est stocké dans un objet de type NSString. Cette chaîne est mis dans une étiquette VC 4. Lorsqu'un utilisateur n'a pas entrez un titre dans VC 1, c'est là où le NÉANT est venu . Je l'ai fixée par l'attribution d'une valeur par défaut de la chaîne de l'objet lorsque l'utilisateur n'entre pas un titre en VC1. Espérons que l'aide à quelqu'un.

0voto

Lukas Kalinski Points 124

J'ai eu un problème similaire, j'ai réussi à résoudre en utilisant les réponses fournies ici.

Dans mon cas, cependant, j'ai eu une classe appelée UIDateLabel (utilisé pour présenter des dates de mis en forme de manière etc). La compilation et l'exécution a entraîné la NSInvalidArgumentException mentionnés ci-dessus.

J'ai ÉTÉ soupçonner que peut-être il ya une classe appelée comme ça, mais une recherche sur google sur UIDateLabel seulement montré quelque obscure hits (et aucun n'est lié à Apple que j'ai pu voir). Donc, je suppose qu'il n'y a pas de problème de nom pour un certain temps... jusqu'à ce que j'ai lu les réponses ici, et il a donné un essai.

Je l'ai donc remplacé le nom de UIDateLabelAbc et tout fonctionne parfaitement. Renommage de retour à UIDateLabel ne fonctionne pas comme XCode me dit qu'il y est une classe de même nom déjà. J'ai donc fait un peu plus d'une recherche sur google et trouvé quelques page du wiki qui prétend à la liste de la UIKit.cadre hiérarchie d'héritage, et dans cette liste que j'ai trouvé UIDateLabel répertoriés. Cependant, c'est toutes les infos que j'ai réussi à trouver sur cette classe, c'est à dire qu'il existe. Ce qu'il fait, de son objectif et ainsi de suite reste inconnu pour moi en ce moment.

Mise à jour: Après avoir lu sur des conventions de nommage, je me rends compte maintenant que la préfixation de vos classes avec l'INTERFACE utilisateur n'est pas une bonne pratique (pour dire le moins). Alors, n'oubliez pas le préfixe de vos classes avec l'INTERFACE utilisateur et vous éviter cela et probablement un tas d'autres problèmes.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X