[Résolu] NSTimer perdu en route?

berfisberfis Membre
juin 2013 modifié dans API AppKit #1

Bonjour!


 


J'essaie de dériver un objet contenant un NSTimer, mais ma classe dérivée ne reçoit pas le message.


@interface BasicObject : NSObject

 


@implementation BasicObject

-(BasicObject*)initWithID: (NSInteger)anID timerInterval:(NSTimeInterval)anInterval repeat:(BOOL)isRepeated
{
self = [BasicObject new];
self.ID = anID;
self.timer = [NSTimer scheduledTimerWithTimeInterval:anInterval target:self selector:@selector(tick:) userInfo:nil repeats:isRepeated];
return self;
}
- (void)tick:(NSTimer*)theTimer
{
[self hasTicked];
}

- (void) hasTicked; {NSLog(@tick...);}
@end

Voila pour la classe de base. Maintenant la classe dérivée:


@interface Duree5 : BasicObject

 


@implementation Duree5

- (Duree5*) initWithID: (NSInteger)anID
{
self.timeLimit = 5;
self = [super initWithID:anID timerInterval:1 repeat:YES];
return self;
}

- (void) hasTicked
{
NSLog(@Durée5 with ID %ld ticking., self.ID);
self.timeLimit--;
if (self.timeLimit<=0) {
NSLog(@Durée5 with ID %ld ended., self.ID);
}
}
@end

mais pas moyen que "hasTicked", pourtant un "override" complet, n'est jamais appelé (alors que la méthode abstraite l'est).


 


Pourquoi?


Réponses

  • C'est un peu le bazar ...


    self = [BasicObject new];  // ???
     
    self.timeLimit = 5;  // self est égal à  quoi ?
    self = [super initWithID:anID timerInterval:1 repeat:YES]; // pas le même self ?

  • berfisberfis Membre
    juin 2013 modifié #3


     


    C'est un peu le bazar ...



    self = [BasicObject new];  // ???



    J'ai lu un peu vite:

     

    + (id)new

    Description

    Allocates a new instance of the receiving class, sends it an init message, and returns the initialized object.

    This method is a combination of alloc and init. Like alloc, it initializes the isa instance variable of the new object so it points to the class data structure. It then invokes the init method to complete the initialization process.

     

    Rien ne remplace le self = [super init]. Même NSObject mérite son init... Trahi par mes habitudes d'il y a 20 ans, où TObject n'en demandait pas tant...

     

    Désolé pour le dérangement...

    Grosse fatigue.

Connectez-vous ou Inscrivez-vous pour répondre.