2009-05-16 5 views
1

Lors de la tentative de ma première sous-classe en Objective-C, j'ai rencontré l'avertissement suivant que je n'arrive pas à résoudre. L'appel à decimalNumberWithMantissa donne un avertissement de "initialisation de type Objective-C distinct".Traitement des méthodes de classe lors du sous-classement dans objectif-c

#import <Foundation/Foundation.h> 

@interface NSDecimalNumberSub : NSDecimalNumber { 
} 
@end 

@implementation NSDecimalNumberSub 
@end 

int main (int argc, char *argv[]) { 
    NSDecimalNumberSub *ten = [NSDecimalNumberSub 
      decimalNumberWithMantissa:10 
      exponent:0 
      isNegative:NO]; 
} 

Une méthode de classe doit-elle être traitée différemment avec une sous-classe? Est-ce que je manque quelque chose de simple? Toute aide serait appréciée.

Répondre

3

NSDecimalNumber définit la méthode decimalNumberWithMantissa:... pour renvoyer un NSDecimalNumber. Vous allez donc récupérer une instance de la classe de base et non votre sous-classe personnalisée. Vous devrez créer votre propre méthode de commodité pour renvoyer une instance de votre sous-classe, ou simplement l'allouer et l'initialiser d'une autre manière. Si vous écrivez votre propre classe, vous pouvez définir une méthode pratique comme celle pour renvoyer le type id, puis utiliser [[self alloc] init] lors de la création de l'instance pour rendre votre classe sûre pour la sous-classe.

+0

Les constructeurs de commodité renvoient généralement une valeur typée dynamiquement (type id) pour cette raison; NSDecimalNumber est une exception et je considère que c'est une erreur. Par exemple, [tableau NSArray] est tapé comme id, et [tableau NSMutableArray] renvoie une instance de NSMutableArray. – jmah

Questions connexes