Apple déclare-t-il la méthode [CIImage initWithImage:(CIImage*)]
que je ne connais pas? La seule méthode avec cette signature que je connais est [CISampler initWithImage:]
. Mais quand j'ai essayé de fournir ma propre méthode, le compilateur m'avertit en disant que la méthode existe déjà. Contexte: J'essaie de créer une méthode pratique qui convertit une instance NSImage
en CIImage
. Ensuite, j'ai créé une méthode de catégorie [CIImage initWithImage:]
qui prend dans une instance NSImage
.Méthode cachée [CIImage initWithImage:]?
Voici la déclaration de la méthode de la catégorie:
@interface CIImage (QuartzCoreExtras)
-(id) initWithImage:(NSImage*) img;
@end
J'ai essayé de l'utiliser dans une sous-classe NSImageView
pour mettre en cache la version CoreImage de l'image:
-(void) setImage:(NSImage *)newImage {
[super setImage:newImage];
[ciImage release];
ciImage = [[CIImage alloc] initWithImage:newImage];
}
Mais quand je compile la méthode ci-dessus , J'obtiens un avertissement disant que quelqu'un d'autre a déjà défini la méthode et prend un paramètre différent:
warning: incompatible Objective-C types 'struct NSImage *', expected 'struct CIImage *' when passing argument 1 of 'initWithImage:' from distinct Objective-C type
De l'option « Aller à la définition » dans XCode, la seule autre mise en œuvre de la méthode (en plus de ma propre implémentation) est [CISampler initWithImage:(CIImage*]
. Je suis vraiment intrigué par cette question - y a-t-il quelque chose que j'ai mal fait?
Juste pour l'amour de l'exhaustivité, voici le corps de la méthode pour [CIImage initWithImage:]
:
@implementation CIImage (QuartzCoreExtras)
-(id) initWithImage:(NSImage*) img {
NSData* tiffData = [img TIFFRepresentation];
NSBitmapImageRep* bitmap = [NSBitmapImageRep imageRepWithData:tiffData];
return [self initWithBitmapImageRep:bitmap];
}
@end
Merci à l'avance.
Peu importe ce que Apple nomme leur méthode si le questionneur propose le même sélecteur, et vice versa - et, en fait, il pourrait très bien être caché '- [CIImage initWithImage:]' (ou ' initWithNSImage: ') méthode, c'est pourquoi c'est une bonne idée de marquer toutes les méthodes que vous ajoutez dans les catégories avec un préfixe ou un suffixe unique à votre application. –
J'inclus le fichier d'en-tête de ma catégorie et je reçois toujours l'avertissement du compilateur. Finalement, j'ai abandonné et nommé ma méthode "initWithNSImage" à la place. – adib