J'ai une classe personnalisée nommée MyImage héritée de UIImage. Maintenant, j'ai un objet UIImage, est-il possible de le convertir en un objet MyImage?Objective-c convertir une classe parente à sa classe dérivée
Mise à jour
Désolé d'être claire.
Je ne peux pas utiliser une catégorie car j'ai besoin d'ajouter de nouvelles propriétés à ma classe.
Ce que je veux accomplir est de simplement laisser mon objet MyImage pointer vers l'objet UIImage d'origine.
Mise à jour 2
J'ai essayé quelque chose comme ceci:
- (MyImage*)initWithUIImage:(UIImage *)image {
if (self = [super init]) {
self = image;
}
return self;
}
Obvious il ne fonctionne pas.
En outre, étant donné que UIImage ne dispose pas d'une méthode nommée 'initWithImage: (UIImage *)', je ne peux pas écrire quelque chose comme
myImage = [[MyImage alloc] initWithImage:uiImage];
J'ai aussi essayé
self = [image copy]
Mais la valeur de retour est encore un objet UIImage, pas un objet MyImage.
Mise à jour 3
En MonImage, je dois ajouter 3 propriétés: url, largeur et hauteur. Depuis que j'écris une application de messagerie instantanée, et quand je reçois un nouveau message d'image, je n'ai que son URL, sa largeur et sa hauteur. Puis j'attribue ceux-ci à un objet MyImage, et télécharge l'image en arrière-plan.
Maintenant donné un UIImage original A, je veux créer un nouvel objet MyImage B, qui pointe vers la même image que A, mais avec ces nouvelles propriétés non assignées. Ensuite, j'Affectez manuellement l'URL, la largeur et la hauteur B.
à @rmaddy, pourriez-vous me dire comment écrire la méthode
[[MyImage alloc] initWithImage:(UIImage*)]
?
Une façon que je peux trouver est d'abord convertir l'objet UIImage à NSData, puis utilisez
[MyImage imageWithData:]
Y at-il une meilleure façon?
Vous pouvez écrire quelque chose comme 'myImage = [[MyImage alloc] initWithImage: uiImage];'. Comme indiqué dans ma réponse, cela nécessite d'ajouter la méthode 'initWithImage:' à votre classe 'MyImage'. – rmaddy
Votre objet est soit un 'UIImage' ou un' MyImage'. Cela ne peut pas être les deux; cela violerait la loi de non-contradiction. Peut-être que cela vous aiderait si vous expliquiez pourquoi vous voulez sous-classer 'UIImage'. Par exemple, si vous ajoutez simplement des méthodes (quelque chose comme 'downloadWithURL:' est quelque peu commun), vous n'avez qu'à le faire, et vous pouvez alors utiliser 'MyImage' dans n'importe quelle classe qui nécessite un' UIImage', car 'MyImage' est une sorte de' UIImage'. –
Publiez plus de détails sur votre classe 'MyImage'. Sans aucun détail, il est difficile d'offrir une réponse concrète. – rmaddy