2012-05-13 15 views
1

Je suis nouveau à Obejctive C, alors s'il vous plaît pardonnez-moi si c'est une question simple. Je suis en train d'obtenir le code ci-dessous pour travailler (du didacticiel d'intégration Facebook IOS), mais je reçois une erreur à la ligneMéthode non déclarée Erreur Objectif C IOS

- (void) logoutButtonClicked:(id)sender { 
    [facebook logout]; 

Je reçois l'erreur

« utilisation d'identificateur non déclaré » logoutButtonClicked. Je sais que c'est en train de mettre en place une méthode qui n'est pas définie. Ma question est la suivante: où la méthode est-elle définie dans le code ci-dessous?

J'ai vu une solution publiée ici mais cela ne fonctionne pas pour moi, cette erreur persiste. J'ai essayé des alternatives pour essayer de résoudre ce problème, mais quelqu'un pourrait-il confirmer ce que fait ce bloc de code? D'après ce que je comprends, nous commençons à créer un pointeur (logoutButton) à UIButton, et nous en définissons les paramètres. Nous utilisons ensuite un sélecteur pour définir un message d'action (LogoutButtonClicked), pour la méthode UIControlEventTouchInside.

Je ne comprends pas bien comment la méthode est déclarée, parce que je pensais que la ligne définit la méthode d'instance ici:

-(void) logoutButtonClicked:(id)sender { 
     [facebook logout]; 

Ou est la méthode étant déclarée dans

[logoutButton addTarget:self action:@selector(logoutButtonClicked) 
      forControlEvents:UIControlEventTouchUpInside]; 

// Add the logout button 
    UIButton *logoutButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    logoutButton.frame = CGRectMake(40, 40, 200, 40); 
    [logoutButton setTitle:@"Log Out" forState:UIControlStateNormal]; 
    [logoutButton addTarget:self action:@selector(logoutButtonClicked) 
      forControlEvents:UIControlEventTouchUpInside]; 
    [self.viewController.view addSubview:logoutButton]; 
    // Method that gets called when the logout button is pressed 
    - (void) logoutButtonClicked:(id)sender { 
     [facebook logout]; 
    } 

J'apprécierais vraiment quelqu'un d'aide à ce sujet, ont lutté avec essayer de comprendre cela en vain.

Melvin

Répondre

3

Le côlon est une partie du nom du sélecteur:

@selector(logoutButtonClicked:) 
          ^

PAS

@selector(logoutButtonClicked) 
+0

Ceci est correct mais n'est pas responsable de l'erreur que l'OP a posée. Le compilateur ne se soucie pas si vous mettez un sélecteur de méthode non implémenté/non défini/non déclaré dans '@selector()'. Il n'y a pas d'erreur avant l'exécution. –

+0

@KenThomases nope - '-Wundeclared-selector' et' -Werror' le feraient lors de la compilation. aussi loin que l'emplacement: bonne prise (+1 sur votre réponse) – justin

2

Vous semblez définir une bonne méthode smack au milieu d'une autre méthode . Tu ne peux pas faire ça. Les lignes:

- (void) logoutButtonClicked:(id)sender { 
    [facebook logout]; 
} 

doivent apparaître en dehors de toute autre méthode, pas à l'intérieur des accolades ({ ... }) d'une autre méthode.