6
votes

Sélecteur non reconnu envoyé à l'instance

Je reçois le message d'erreur suivant que je ne peux pas comprendre pourquoi son événement parce que je n'utilise aucun UIImageView. Parfois, je reçois la même erreur, mais c'est une calayeuse?!?

Sa valeur en mentionnant également que j'ai 2 autres contrôleurs et 2 contrôleurs et un contrôleur de base où ce code réside. P>

EDIT: P>

Ceci est la structure de mon projet P>

MainViewController & Sa NIB - AccueilViewController à NIB P>

MainViewController-Landscape & Sa NIB - AccueilViewController-Paysage dans NIB P>

homebevilleControllerbase - pas de nib - Classe de base où toutes les sorties et code de configuration de l'élément existe. - Les points de vente sont utilisés par les deux classes d'enfants ci-dessous. - Les points de vente sont liés à des commandes dans chacune des nibrations principales. P>

homevieController - Hérités de HomeViewControllerbase P>

homeviewController-paysage - Hérités de HomeViewControllerbase P>

Donc, ce qui se passe est que la classe enfant tente de traiter sa classe de base (qui contient tous les points de vente). Je l'ai conçu de cette façon d'éviter la duplication du code dans les différentes visiteurs d'orientation. P>

-[UIImageView bestSellItemTapped:]: unrecognized selector sent to instance 0x681c2b0 2011-04-12 15:45:26.665 [21532:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIImageView bestSellItemTapped:]: unrecognized selector sent to instance 0x681c2b0'
*** Call stack at first throw: (    0   CoreFoundation                      0x00dc85a9 __exceptionPreprocess + 185  1   libobjc.A.dylib                   0x00f1c313 objc_exception_throw + 44  2   CoreFoundation                    0x00dca0bb -[NSObject(NSObject) doesNotRecognizeSelector:] + 187  3   CoreFoundation                      0x00d39966 ___forwarding___ + 966   4   CoreFoundation                      0x00d39522 _CF_forwarding_prep_0 + 50   5   UIKit                             0x0001a4fd -[UIApplication sendAction:to:from:forEvent:] + 119    6 UIKit                               0x000aa799 -[UIControl sendAction:to:forEvent:] + 67  7   UIKit                               0x000acc2b -[UIControl(Internal)
_sendActionsForEvents:withEvent:] + 527     8   UIKit                         0x000ab7d8 -[UIControl touchesEnded:withEvent:] + 458     9   UIKit                               0x002ad4de
_UIGestureRecognizerSortAndSendDelayedTouches
+ 3609  10  UIKit                               0x002adc53
_UIGestureRecognizerUpdateObserver + 927    11  CoreFoundation                0x00da989b
__CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__
+ 27    12  CoreFoundation                      0x00d3e6e7 __CFRunLoopDoObservers + 295     13  CoreFoundation                0x00d071d7 __CFRunLoopRun + 1575  14  CoreFoundation                      0x00d06840 CFRunLoopRunSpecific + 208   15  CoreFoundation                    0x00d06761 CFRunLoopRunInMode + 97    16 GraphicsServices                    0x010001c4 GSEventRunModal + 217     17  GraphicsServices                    0x01000289 GSEventRun + 115     18  UIKit 0x00028c93 UIApplicationMain + 1160   19                      0x000027a9 main + 121   20 
                      0x00002725 start + 53 ) terminate called after throwing an instance of 'NSException'


2 commentaires

Une chose que je remarque, c'est que vous effectuez le contenu de la vision de ScrollView 150 fois quelque chose pendant que vous créez 151 boutons.


Duplicaté possible de Comment puis-je déboguer 'Sélecteur non reconnu envoyé à Erreur d'instance


3 Réponses :


0
votes

Lorsque vous avez allocé votre uibutton code>, vous avez marqué que AutoRelease code>, cela pourrait être la raison du crash car il existe des possibilités de réclamer Mainbutton code> Par le système,

UIButton *mainButton = [[[UIButton alloc]init] autorelease];


2 commentaires

Enlevé l'autorelease et obtenez la même erreur sauf de Calayer


Ce n'est pas le problème. Vous devez libérer Mainbutton . Votre autorelease était correcte. Si vous le supprimez, alors vous devez libérer explicitement Mainbutton après l'avoir ajouté à son SuperView.



2
votes

est le ViewController Ce code est toujours en vie lorsque le bouton est taraudé? Une erreur comme celle-ci (objet non liée - uiimageview dans ce cas signifie que vous avez un pointeur sur une zone de la mémoire libérée et réutilisée pour autre chose ( uiImageView Dans ce cas).

Ajouter un NSLOG () Impression sur la méthode -DeAlloc du contrôleur de vue et assurez-vous qu'il n'est pas déclenché avant de toucher le bouton.

En réalité, ajoutez-en une autre nslog au début de configureBestSellitems - nslog (@ "Je suis% x", auto); (oui,% x, pas% @). Cela imprimera l'adresse de votre contrôleur - Comparez-le avec l'adresse de l'objet de crash (comme dans "Sélecteur non reconnu envoyé à l'instance 0x681c2b0 " - voir si elle imprime "Je suis 0x681C2B0" Initialement)


9 commentaires

@Svd - J'ai supprimé le [Super Dealloc] des contrôleurs de l'enfant et cela semblait fonctionner, mais je ne suis pas sûr si le contrôleur de base sera jamais publié maintenant !?


Supprimer [Super DealLoc] est la mauvaise chose à faire. Vous avez clairement un problème avec tout le contrôleur auto étant distribué de manière inattendue, mais en supprimant [Super Dealloc] Vous masquez le problème, ne résolvez pas. Vous devriez publier plus de code associé à la manière dont votre contrôleur d'affichage principal est instancié et présenté. Cela devrait être où le problème est.


@Thelearner Suppression de [Super DealLocC] confirme que vous avez une version inattendue quelque part, mais certainement pas une solution.


@Svd Je suis dans la salle de discussion sur iPhone / iPad si vous avez d'autres q's - appréciez votre aide


OK, le problème se passe-t-il alors lorsque vous passez au paysage? Ou quand vous passez au paysage et à l'arrière? Partagez-vous les bestsellscrollView entre votre paysage et votre portrait? Vous voudrez peut-être ajouter des points d'arrêt (ou NSLog () s) pour traiter les méthodes de transloc de points de vue et voir s'ils sont libérés à un moment inattendu.


Lorsque la méthode principale: la méthode exécute, DealLoc est appelé à domicileVendontroller et à son tour homévoyantControllerbase que je ne peux pas comprendre. Ensuite, lorsque vous passez du portrait à Payscape Dealloc, on appelle le paysage de la maisonViewController, puis de la maisonViewControllerbase - Donc, DealLoc est appelé juste avant la présentation de la vue - je ne comprends pas cela.


Il y a 2 meilleures ventes Schollviews - une sur chaque nib d'orientation qui sont liées à un seul point de vente


Est-ce que le Self.LeScapeviewController conserve le contrôleur d'affichage?


Avoir toujours le même problème, même avec mon nouveau design - les homeViewControlers appellent DealLoc - je ne peux pas déterminer pourquoi! Toute aide serait grandement appréciée



1
votes

Si vous travaillez avec InterfaceBuilder et que vous avez fait connecter / relier des éléments d'interface graphique aux ibactions / méthodes dans le fichier d'en-tête des contrôleurs cliquez avec le bouton droit de la souris sur ou "cntrl + click" Cet élément graphique qui provoque l'erreur d'être connecté / lié à des méthodes toujours existantes uniquement.

voir `Sélecteur non reconnu envoyé à l'instance `Après avoir envoyé` démissionnaireControléranimated: Achèvement "à un UIViewController


0 commentaires