57 votes

xCode "Résultats d'accès aux propriétés inutilisés - les getters ne doivent pas être utilisés pour les effets secondaires"

Je reçois cet avertissement lorsque j'appelle une routine locale.

Mon code est le suivant:

 -(void)nextLetter {
    // NSLog(@"%s", __FUNCTION__);
    currentLetter ++;
    if(currentLetter > (letters.count - 1))
    {
        currentLetter = 0;
    }
    self.fetchLetter;
}
 

Je reçois l'avertissement sur la déclaration self.fetchLetter.

Cette routine ressemble à ceci:

 - (void)fetchLetter {
    // NSLog(@"%s", __FUNCTION__);
    NSString *wantedLetter = [[letters objectAtIndex: currentLetter] objectForKey: @"langLetter"];

    NSString *wantedUpperCase = [[letters objectAtIndex: currentLetter] objectForKey: @"upperCase"];    


.....   
}
 

Je préfère corriger les messages d'avertissement, existe-t-il un meilleur moyen d'écrire cela?

Merci!

122voto

Tom Dalling Points 10656

La notation par points (c'est-à-dire self.fetchLetter ) est destinée aux propriétés, pas aux méthodes arbitraires. Le self.fetchLetter est interprété comme "récupère la propriété 'fetchLetter' de 'self'," ce qui n'est pas ce que vous souhaitez.

Utilisez simplement [self fetchLetter] place.

4voto

Chris Devereux Points 3536

Vous déclarez fetchLetter en utilisant une syntaxe comme celle-ci?

 @property (retain) id fetchLetter;
 

Cela semble faux pour ce que vous faites. Les propriétés sont destinées à être des accesseurs variables qui (dans le cas de getters) n'ont pas d'effets secondaires.

Vous devriez déclarer fetchLetter en tant que méthode, comme ceci:

 - (void) fetchLetter;
 

et y accéder en utilisant:

 [self fetchLetter]
 

0voto

LAOMUSIC ARTS Points 77

Je viens de résoudre mon problème, dans mon cas, un projet CoreLocation, en utilisant les réponses de Tom et Chris -

Je déclare:

 @property (strong, nonatomic)CLLocationManager *locationManager;
 

Et mis en œuvre comme:

 @synthesize locationManager = _locationManager;
....
- (void) dealloc {
         [self locationManager];
}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X