Comportement étrange Xcode surcharge Getters/Setters
igreg
Membre
Salut, je viens vers vous pour voir si vous aussi vous avez ce "problème".
J'utilise Xcode 4.6.3 avec ARC, et Xcode est sensé déclarer automatiquement les @synthesize des propriétés de ma classe.
Prenons ma classe:
#import <Cocoa/Cocoa.h>
typedef enum {
GAArtworkViewPlaceholderNone,
GAArtworkViewPlaceholderSong,
GAArtworkViewPlaceholderAlbum,
GAArtworkViewPlaceholderArtist,
GAArtworkViewPlaceholderPlaylist,
GAArtworkViewPlaceholderPodcast
} GAArtworkViewPlaceholder;
@interface GAArtworkView : NSView
@property (nonatomic, strong) NSImage *image;
@property (nonatomic, assign) GAArtworkViewPlaceholder placeholder;
@end
ensuite si je souhaite surcharger les getter et setter de la proporiété image
- (void)setImage:(NSImage *)newImage{
if (_image != newImage) {
_image = newImage;
[self setNeedsDisplay:YES];
}
}
- (NSImage *)image{
if (_image) return _image;
switch (self.placeholder) {
case GAArtworkViewPlaceholderNone:
return [NSImage imageNamed:@placeholderNone];
break;
case GAArtworkViewPlaceholderSong:
return [NSImage imageNamed:@placeholderSong];
break;
case GAArtworkViewPlaceholderAlbum:
return [NSImage imageNamed:@placeholderAlbum];
break;
case GAArtworkViewPlaceholderArtist:
return [NSImage imageNamed:@placeholderArtist];
break;
case GAArtworkViewPlaceholderPlaylist:
return [NSImage imageNamed:@placeholderPlaylist];
break;
case GAArtworkViewPlaceholderPodcast:
return [NSImage imageNamed:@placeholderPodcast];
break;
default:
break;
}
return nil;
}
hors xCode me génère une erreur "Use of undeclared identifier '_image'".
si je surcharge soit le getter, soit le setter uniquement (pas les deux) ça fonctionne.
Je règle ce problème en indiquant manuellement
@synthesize image = _image;
Voilà , je me demandais, si c'est le comportement normal (j'utilise ARC depuis peux) ou bien si mon xCode délire un peu. Normalement si xCode génère automatiquement les @synthesize, je n'ai pas à le faire moi-même.
Merci.
Mots clés:
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
C'est normal. Quand tu implémentes toi même un getter ET un setter, tu dois utiliser @synthesize.
ok merci, je n'avais même pas fait attention ;D
... ou déclarer la variable d'instance _image.
Donc logique que quand tu prends tout en charge et donc implémentes à la fois le getter et le setter toi-même, il ne va pas générer la variable car c'est même pas dit que tu en aies besoin. Et si tu la veux, tu la déclare toi-même, ou tu utilises explicitement @synthesize pour qu'il te la génère.
Tiens je rajoute mon grain de sel ...
(c'est parce qu'il n'y a plus de match de rugby en ce moment ; j'ai plein de temps disponible ;-)
Le terme "surcharge" employé en titre de ce fil est impropre.