: sélecteur non reconnu envoyé à l'instance

J'ai l'printing de me cogner la tête contre le mur ici (et je suis prêt à le faire, franchement).

J'essaie de définir un arrière-plan à la vue. Context J'ai besoin de définir une image et j'utilise ce code (qui fonctionne parfaitement dans deux autres sous-classs de UIViewController – c'était un copyr / coller dans le nouveau file):

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, mais 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 à faire. J'ai vérifié dans IB que la prise de reference de la vue de niveau supérieur est définie sur le propriétaire du file. J'ai nettoyé le projet et redémarré. J'ai même fermé Xcode et redémarré à nouveau – pas de chance. Quoi d'autre manque-t-il?

Edit: Comme je l'ai mentionné, il n'y a pas beaucoup de trace de stack arrière, 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.

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

Une enquête plus approfondie, il s'avère que le title nom était à l'origine du problème. J'avais l'label déclarée comme

 IBOutlet UILabel *title; 

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

Essaye ça :

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

Cela ressemble vraiment à un problème "over released".

La raison est difficile à dire dans votre exemple (puisque le code semble tout à fait copyWithZone ) mais le fait que vous ayez un sélecteur copyWithZone envoyé sur une instance de UILabel (au lieu de UIColor ) me dirait que le bg a été libéré et fait maintenant reference à un UILabel .

Vérifiez que plus tard dans le code, vous ne relâchez pas l'object bg .

J'espère que cela t'aides

EDITER APRÈS VOTRE PREMIER COMMENTAIRE

C'est assez bizarre que vous copyWithZone unrecognized selector sent to instance un copyWithZone unrecognized selector sent to instance , car je crois que si votre self.view était du mauvais type (pas un UIView ) alors vous recevriez un setBackgroundColor unrecognized selector sent to instance et non un copyWithZone .

Pour mieux parsingr ce problème, lorsque l'exception est levée, j'écrirais dans le débogueur:

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

pour voir si tout se passe bien comme il se doit.

Ce problème m'est arrivé la nuit dernière et j'avais en fait une label nommée title. Je me suis arraché un peu de mes cheveux en changeant le nom pour que quelque chose d'autre ne fonctionne pas. Il s'avère que j'essayais d'envoyer une valeur NIL d'un champ de text à une label dans un VC. J'ai 4 VC et un user entre un titre à VC 1 dans le champ de text et qui est stocké dans un object de type NSSsortingng. Cette string est placée dans une label dans VC 4. Quand un user n'entre pas un titre dans VC 1, c'est là que le NIL est entré. Je l'ai corrigé en affectant une valeur par défaut à l'object string lorsque l'user n'entre pas de titre dans VC1. J'espère que ça aide quelqu'un.

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

Dans mon cas, cependant, j'avais une class appelée UIDateLabel (utilisée pour présenter les dates de manière formatée, etc.). La compilation et l'exécution ont abouti à l'exception NSInvalidArgumentException mentionnée ci-dessus.

Je soupçonnais que peut-être il y avait une class appelée comme ça, mais googler sur UIDateLabel n'a montré que quelques hits obscurs (et aucun qui lié à Apple comme je pouvais le voir). Donc j'ai supposé qu'il n'y avait aucun problème de nommage pendant un moment … jusqu'à ce que je lise les réponses ici et l'ai essayé.

J'ai donc remplacé le nom par UIDateLabelAbc et tout fonctionne parfaitement. Renommer return à UIDateLabel ne fonctionne pas car XCode me dit qu'il existe déjà une class avec ce nom. J'ai donc fait quelques searchs sur google et trouvé une page wiki qui prétend répertorier la hiérarchie d'inheritance UIKit.framework, et dans cette list j'ai trouvé UIDateLabel listée. Cependant, c'est toute l'information que j'ai réussi à find sur cette class, c'est-à-dire qu'elle existe. Qu'est-ce qu'il fait, son but et ainsi de suite rest inconnu pour moi en ce moment.

Mise à jour: Après avoir lu les conventions de dénomination, je réalise maintenant que le préfixage de vos classs avec l'interface user n'est pas une bonne pratique (c'est le less qu'on puisse dire). Donc, ne préfixez pas vos classs avec l'interface user et vous éviterez cela et probablement un tas d'autres problèmes.

J'obtiens cette erreur quand je déclare une variable IBOutlet, et lui donne le même nom que quelque chose d'autre dans ce controller de vue. Renommer mes variables et fonctions plus judicieusement donc résolu le problème