2017-10-19 18 views
-1

im sur OSX, XCode9, Objectif C.bouton Connexion de programmation XCode9, Objective-C, OSX

I ont une viewController layouted dans IB. La vue contient un bouton connecté à la correspondante viewController

SHTourViewController.h

@property (weak) IBOutlet SHStandardButton *closeButton; 
// SHStandardButton is a subclass from NSBUtton. 

Le contrôleur de vue s'instantinated par le code dans une autre classe (je dois instantinate cette viewController d'autres classes parce que je besoin plus d'une fois).

// Get instance of viewController 
SHTourViewController* tourViewController = [storyBoard instantiateControllerWithIdentifier:@"tourViewController"]; 

maintenant dans la méthode viewDidLoad de mon viewController, j'aime connecter l'action et la cible des boutons:

SHTourViewController.m

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    [self.closeButton setAction:@selector(closeButtonClicked:)]; 
    [self.closeButton setTarget:self]; 
} 

- (void)closeButtonClicked:(id)sender { 
NSLog(@"CLOSE!"); 
} 
} 

Lorsque je clique sur le bouton, les plantages d'applications (Thread 1: EXC_BAD_ACCESS). Je ne peux pas trouver l'erreur que je fais ici.

Toute aide appréciée.

enter image description here

+0

Veuillez fournir le rapport d'accident complet réel depuis la console. – matt

+0

J'ai joint une image. Pourquoi -1? –

+0

Si vous définissez un point d'arrêt sur les exceptions Objective-C, Xcode doit s'arrêter à l'erreur réelle plutôt qu'à NSApplicationMain. Cela vous donnerait une ligne de code avec laquelle travailler et une trace de pile utile. –

Répondre

0

Vous ne fournit pas assez d'informations sur ce que vous faites. Mais, dans l'état actuel des choses, le fait que vous obteniez un mauvais accès suggère qu'un objet important a disparu prématurément dans un nuage de fumée. Je pense que cet objet est self, et que le problème a à voir avec le code après cette ligne:

SHTourViewController* tourViewController = 
    [storyBoard instantiateControllerWithIdentifier:@"tourViewController"]; 

Vous obtenez une toute nouvelle instance de ce contrôleur de vue mais vous ne recevez pas son point de vue correctement dans la hiérarchie de vue et le contrôleur de vue lui-même dans la hiérarchie du contrôleur de vue, de sorte que le contrôleur de vue (je devine) est libéré.

Mais vous ne nous avez pas montré le code pertinent, donc c'est juste une supposition.

+0

Merci! Je ne voulais pas "agiter les mains" - je viens de dire ... toute aide appréciée -> Et grâce au point d'arrêt exceptionnel et à vos conseils j'ai trouvé l'erreur. Le viewController a été désalloué car il n'avait pas de référence forte. Une fois ajouté, cela a bien fonctionné. –

+0

Mais c'est juste ce que j'ai suggéré. Si ma réponse était bonne, ne serait-il pas correct de l'accepter? – matt