2012-04-23 4 views
1

Je travaille sur le cours CS193p Stanford iOS et j'en ai presque fini avec l'affectation 3 - dans laquelle je convertis la calculatrice graphique en une application universelle pour iPad. L'application dessine un graphique lorsqu'un programme (par exemple "x + 3") est entré dans la calculatrice, puis l'utilisateur appuie sur un bouton graphique. Sur l'iPhone, je simplement segued lorsque le bouton graphique a été pressé, mais l'iPad, j'ai un UISplitViewController que je mis en place une action cible à partir du bouton Graphique:iOS La méthode IBAction n'est jamais appelée

- (IBAction)ipadGraphPressed:(UIButton *)sender { 
    if ([self splitViewGraphViewController]) { 
     [[self.splitViewController.viewControllers lastObject] setProgram:self.brain.program]; 
    } 
} 

Cela appelle setProgram: dans le GraphViewController, qui appelle ensuite setNeedsDisplay: sur GraphView et dessine le graphique.

À titre de comparaison, voici la méthode de Segue qui fonctionne sur l'iPhone:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    [segue.destinationViewController setProgram:self.brain.program]; 
} 

Je suis très sûr que la connexion est établie entre le bouton et son mode d'action, mais quand je lance l'application, cette action la méthode n'est jamais appelée lorsque le bouton est enfoncé. Y at-il autre chose à vérifier pour s'assurer que la méthode est appelée?

+0

Si la méthode d'action n'est pas appelée lorsque le bouton est enfoncé, alors d'une manière ou d'une autre le 'IBAction' n'est pas lié au bouton correctement. Etes-vous sûr de connecter l'IBAction à l'événement Touch up inside et de créer votre contrôleur de vue de manière à ce que les connexions soient automatiquement établies pour vous au moment de l'instanciation? – aroth

+0

Je suis certain que l'événement Touch Up Inside est connecté. En ce qui concerne la configuration du contrôleur de vue, je ne suis pas si sûr. L'iPhone segue fonctionne en définissant la propriété du programme GraphViewController, et j'ai donc fait exactement la même chose dans la méthode d'action. J'ai supposé que cela fonctionnerait de la même manière. – Paul

+0

Vérifiez d'abord que ce bouton a son action connectée à ipadGraphPressed. Puis ajoutez NSLog (@ "% @", expéditeur); à l'intérieur de la méthode, appuyez sur le bouton et voir si le bouton fonctionne ou non. – Pochi

Répondre

0

Il s'est avéré qu'il n'y avait rien de mal avec mon code, en soi. Après avoir manipulé le storyboard, j'ai remarqué que même si j'ajoutais de nouveaux boutons à la vue principale, ils ne se montraient jamais quand l'application était lancée. J'ai essayé de changer le nom du storyboard de iPad.storyboard en iPad_1.storyboard, et puis mes changements sont apparus, mais aucun de mes codes de rotation n'était en vigueur. Ma solution à tout ce bordel était de revenir à une version antérieure de l'application juste avant d'ajouter le nouveau storyboard. J'ai rajouté un storyboard sur iPad et j'ai pu faire toutes les connexions correctes.

Pour confirmer cela, un de mes amis a vérifié le projet sur Github et a signalé que même si je ne pouvais pas appeler la méthode IBAction, cela fonctionnait parfaitement bien pour lui. Je crois qu'il y avait quelque chose de fâché avec mes paramètres de storyboard locaux, et cela empêchait l'application de fonctionner correctement. Mon point à retenir à ce sujet est de faire attention à nommer et renommer les fichiers de storyboard, en particulier lorsqu'il s'agit de contrôle de version.

2

J'ai eu le même problème. J'ai tout connecté correctement sur mes IBOutlets et IBActions. Qu'est-ce qui cause le problème est une vue transparente sur le dessus des boutons qui bloque les touches. Après avoir redimensionné la vue de sorte qu'il ne bloque pas les boutons en dessous, il a résolu mon problème.

Questions connexes