2010-11-10 3 views
2

voulez changer mon code NSTimer pour utiliser applicationSignificantTimeChangeAide au changement de NSTimer pour textLabel. Code inclus

C'est ce que j'ai en ce moment.

Fondamentalement, je veux changer la minuterie, au lieu de changer toutes les 5 secondes par exemple, je veux que ces textLabels changent à 12 heures du matin tous les soirs quelqu'un m'aider?

//h file 

NSTimer *timer; 

IBOutlet UILabel *textLabel; 

//m file 

- (void)onTimer { 

    static int i = 0; 

    if (i == 0) { 
     textLabel.text = @"iphone app"; 
    } 

    else if (i == 1) { 
     textLabel.text = @" Great App!"; 
    } 

    else if (i == 2) { 
     textLabel.text = @" WOW!"; 
    } 

    else { 
     textLabel.text = @" great application again!!"; 
     i = -1; 
    } 

    i++; 
} 


timer =[NSTimer scheduledTimerWithTimeInterval:5.0 target:self selector:@selector(onTimer) userInfo:nil repeats:YES]; 

Répondre

0

le sélecteur de la minuterie doit être:

-(void) onTimer:(NSTimer *) timer 
{ 
    // yourcode 

} 

et appelé avec:

[NSTimer scheduledTimerWithTimeInterval:5.0 target:self selector:@selector(onTimer:) userInfo:nil repeats:YES]; 

vous avez besoin du "ontimer * : *"


[ED IT]

pour appeler une fonction qui se déclenchera à 12h du matin, pour une faible performance (c.-à-d. pas 12: 00: 00: 0000), vous pouvez effectuer les opérations suivantes pour comme une application qui se trouve en arrière-plan:

NSTimeInterval minute = 60.0f 
[NSTimer scheduledTimerWithTimeInterval:minute target:self selector:@selector(onTimer:) userInfo:nil repeats:YES] 

-(void) onTimer:(NSTimer *) timer 
{ 
    NSDate *midnight = [NSDate dateWithNaturalLanguageString:@"today at 12:00 am"]; // unsure of this line 
    if ([midnight timeIntervalSinceDate:[NSDate date]] < 30.0f) 
     // set off alarm. 

} 
+0

Et avec le « ontimer » je place où faire J'ai mis le 12am dans le TimeInterval? – BasicApp

+0

ajouté quelques modifications ci-dessus. Code non testé, attention. Vous devrez jouer avec les intervalles de temps, et peut-être utiliser "aujourd'hui à 23h59" au lieu de minuit. –

+0

Merci, je vais essayer. – BasicApp

13

Il y a deux choses que vous pouvez faire pour répondre à un applicationSignificantTimeChange:

(1 Implémentez simplement applicationSignificantTimeChange: dans le délégué de votre application si vous avez une connexion avec le contrôleur de vue qui doit être mise à jour.

- (void)applicationSignificantTimeChange:(UIApplication *)application { 
    yourViewController.textLabel.text = @"random text"; 
} 

(2) Abonnez-vous à la notification UIApplicationSignificantTimeChangeNotification dans le contrôleur de vue qui devrait obtenir la mise à jour. Vous pourriez peut-être mettre ce code dans viewDidLoad

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(onSignificantTimeChange:) 
               name:UIApplicationSignificantTimeChangeNotification 
               object:nil]; 
} 

- (void)onSignificantTimeChange:(NSNotification *)notification { 
    self.textLabel.text = @"random text"; 
} 

Vous devez également appeler

[[NSNotificationCenter defaultCenter] removeObserver:self]; 

quelque part lorsque votre contrôleur de vue ne sont plus nécessaires.

+1

J'aime mieux que ma réponse. Si l'iPhone peut vous informer de l'heure, alors tant mieux! –

0

semble assez simple pour moi - il suffit de créer un NSDate minuit, calculer l'intervalle de temps de 24 heures en quelques secondes, et créer le NSTimer avec
- (id)initWithFireDate:(NSDate *)date interval:(NSTimeInterval)seconds target:(id)target selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)repeats