2010-03-10 3 views
1

Je pense que j'ai un malentendu conceptuel et j'apprécierais une explication.Comment déplacer un bloc de code dans une méthode à des fins d '«efficacité»?

Au sein d'une classe, j'avais le même bloc de code répéter 3 fois (et fonctionne parfaitement), mais pour essayer de rendre les choses plus « efficace » Je l'ai pris et fait une méthode dans la classe comme suit:

- (void)dateUP { 
NSLog(@"dateUp"); 
[UIView beginAnimations:@"datePicker" context:nil]; 
[UIView setAnimationDuration:0.5]; 

datePicker.transform = CGAffineTransformMakeTranslation(0,-310); 
[UIView commitAnimations]; 
} 

et où le code était à l'origine, je mets:

[self dateUp]; 

et je mets ce qui suit dans mon .h:

-(void)dateUp; 

Je construis et obtenir cet avertissement:

Line Location DetailPopUpView.m:165: warning: method definition for '-dateUp' 
not found 

et un accident avec cela dans la console (et d'ailleurs, la déclaration NSLog ne figure pas dans la console):

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', 
reason: '*** -[DetailPopUpView dateUp:]: unrecognized selector sent to instance 
0x3d33ef0' 

Toute aide appréciée . Une chose que je remarque est que le message de la console a dateUp: (avec deux points) comme si un paramètre est attendu. Donc, alors que la solution la plus simple est simplement de remettre le code, en le répétant 3x, j'aimerais savoir ce que je fais mal.

Merci.

+0

+1 pour la bonne grâce :) Merci –

Répondre

4

Votre méthode est la suivante:

- (void)dateUP { ... } 

Votre déclaration d'en-tête comprend:

-(void)dateUp; 

Vous pourriez avoir une erreur d'orthographe.

+0

Alex. C'est embarrassant. Tout à fait raison. J'ai besoin de plus de sommeil. –

+0

Ça nous arrive à tous! –

+0

Trop de fois à admettre! –

2

On dirait que vous avez des cas où vos sélecteurs (noms de méthodes) ne correspondent pas. dateUP est différent de dateUp qui est très différent de dateUp:

Cela devrait bien:

- (void)dateUp 
{ 
    NSLog(@"dateUp"); 
    [UIView beginAnimations:@"datePicker" context:nil]; 
    [UIView setAnimationDuration:0.5]; 
    datePicker.transform = CGAffineTransformMakeTranslation(0,-310); 
    [UIView commitAnimations]; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [self dateUp]; 
} 
Questions connexes