2009-09-03 4 views
0

c'est ma classe héritée de UIView: MobileViewproblème d'héritage Objective-C avec UIView

@interface MobileView : UIView { 
    IconView *icon1; 
    IconView *userCar; 
    id goTimer; 
} 

@property (nonatomic, retain) IconView *icon1; 
@property (nonatomic, retain) IconView *userCar; 

-(void) goRightInSeconds: (NSInteger)secs; 
-(IconView *) cannon; 

@end 

J'ai aussi une autre classe qui inheritated UIView: IconView

@interface IconView : UIView { 
    UIImage *iconImage; 
    CGFloat originalX, originalY; 
} 

@property (nonatomic, retain) UIImage *iconImage; 

-(id)initWithImage: (UIImage *)image andFrame:(CGRect) rect; 

-(CGFloat) getX; 

-(CGFloat) getY; 

@end 

Maintenant, en une autre classe "vue principale" qui est aussi une sous-classe de UIVIew, j'appelle ceci:

mobile = [[MobileView alloc] initWithFrame:CGRectMake(0, 100, 150, 150)]; 
***[mobile cannon]*** 

Maintenant, j'ai une erreur: [UIView canon]: sélecteur non reconnu envoyé à l'instance 0xd1ae00' (je toujours la même erreur si j'utilise [icon1 mobile])

Pourquoi ne regconize pas le mobile un objet MobileView mais un UIView?

Répondre

2

Avez-vous:

- (id) initWithFrame:(CGRect)frame { 
    if (self = [super initWithFrame:frame]) { 
    // ... 
    } 
    return self; 
} 

dans votre sous-classe UIView@implementation?

+0

je ceci: self = [[UIView alloc] initWithFrame: cadre]; Je suppose que cela a causé le problème. VOUS ÊTES L'HOMME, ALEX. – RoundOutTooSoon

+0

@Alex Est-il nécessaire de réécrire les constructeurs pour toutes les sous-classes? –

+0

Je remplacer les méthodes initWithFrame et dealloc pour sous-classer UIView. D'autres types de sous-classes peuvent nécessiter le remplacement d'autres méthodes. –

1

Avant d'appeler

mobile = [[MobileView alloc] initWithFrame:CGRectMake(0, 100, 150, 150)]; 

Comment définissez-vous mobile? Pas comme un UIView *, j'espère.

C'est une façon de le faire:

MobileView *mobile = [[MobileView alloc] initWithFrame:CGRectMake(0, 100, 150, 150)]; 
+0

non j'ai défini mobile comme un MobileView. Le problème était dans la fonc init que je self = [[UIView alloc] initWithFrame: cadre] mais pas (self = [super initWithFrame: cadre]) – RoundOutTooSoon