2010-11-12 17 views
0

Je sais qu'une fois que vous aurez mieux codé, vous saurez quelles variables sont nulles et nulles ici et là. Sur le chemin de cet état d'esprit existe-t-il des méthodes pour acculer votre variable qui prétend être nulle et vérifier qu'elle est en effet nulle, ou que vous utilisez simplement le mauvais code?Travailler en arrière à partir de null

Exemple:

-(IBAction) startMotion: (id)sender { 
    NSLog(@"Forward or back button is being pressed."); 
    UIButton * buttonName = (UIButton *) sender; 
    NSLog(@"Button Name: %@", buttonName.currentTitle); 
} 

Bouton Nom: (null) est ce qui apparaît dans la console

Merci

+1

Ceci est ... Objectif C? Vous devriez probablement ajouter votre langue cible aux tags, afin que les personnes qui connaissent le mieux la langue puissent vous aider. –

Répondre

1

According to Apple's docs, the value for currentTitle may be nil. Il peut simplement ne pas être défini.

Vous pouvez toujours faire if (myObject == nil) pour vérifier, ou dans ce cas:

-(IBAction) startMotion: (id)sender { 
    NSLog(@"Forward or back button is being pressed."); 
    UIButton * buttonName = (UIButton *) sender; 
    if (buttonName != nil) { 
    NSString *title = buttonName.currentTitle; 
    NSLog(@"Button Name: %@", title); 
    } 
} 

Une autre façon de vérifier si l'arrière ou sur le bouton avant est pressé, est de vérifier la id lui-même.

//in the interface, and connect it up in IB 
//IBOutlet UIButton *fwdButton; 
//IBOutlet UIButton *bckButton; 

-(IBAction) startMotion: (id)sender { 
    NSLog(@"Forward or back button is being pressed."); 
    UIButton * buttonName = (UIButton *) sender; 
    if (buttonName == fwdButton) { 
    NSLog(@"FWD Button"); 
    } 

    if (buttonName == bckButton) { 
    NSLog(@"BCK Button"); 
    } 
} 

De même, assurez-vous que vos points de vente et vos actions sont tous connectés dans IB, et que vous enregistrez et reconstruisez le projet. Je suis allé où j'ai changé quelque chose dans IB, enregistré le fichier .m (pas la plume) et était comme "pourquoi ça ne marche pas ???"

-3

buttonName ne peut pas être nulle, sinon buttonName.currentTitle produirait une erreur.

Par conséquent, l'attribut currentTitle lui-même doit être nul. Ou, peut-être currentTitle est une chaîne avec la valeur (null).

En général, en Objective-C, si vous avez [[[myObject aMethod] anotherMethod] xyz] et que le résultat est null, il est difficile de savoir quelle méthode a renvoyé la valeur null. Mais avec la syntaxe de point . ce n'est pas le cas.

+2

Incorrect. 'buttonName.currentTitle' est seulement une façon différente d'écrire' [buttonName currentTitle] ', c'est juste une syntaxe différente pour envoyer un message sans aucun paramètre. Et puisque vous pouvez envoyer en toute sécurité un message à 'nil' (qui retourne alors' nil' ou 0 ou 0.0 ou 'NULL'),' buttonName' pourrait aussi être 'nil'. – Sven

0

J'utilisais le mauvais champ dans Interface Builder J'utilisais Name à partir de l'identité d'Interface Builder au lieu de Title à partir des paramètres du bouton.