2010-11-30 7 views
4

J'ai besoin de savoir s'il est possible de créer un nouveau thread pour gérer la configuration des notifications locales.Définition de notifications locales sur un nouveau thread?

Mon application dépend fortement de ces notifications, je souhaite donc que l'application fonctionne pendant que le téléphone définit les notifications.

Exemple:

(maintenant)

vous lancez l'application, l'application se bloque à l'écran de démarrage pour définir les notifications locales, il lance.

(Je veux)

Les applications lancements et est utilisable alors que les notifications locales sont définies.

J'ai besoin quelques exemples de code, aussi, s'il vous plaît :)

(pour l'enregistrement, je suis en train de 60 notifications locales à chaque fois que l'application pour mes avant-plan entre dans propres raisons ...)

Merci! !

Répondre

3

Oui cela peut être fait, je le fais tout le temps:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    // Add the navigation controller's view to the window and display. 
    [NSThread detachNewThreadSelector:@selector(scheduleLocalNotifications) toTarget:self withObject:nil]; 
    [window addSubview:navigationController.view]; 
    [window makeKeyAndVisible]; 

    return YES; 
} 

-(void) scheduleLocalNotifications 
{ 

    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 

    for (int i = 0; i < 60; i++) 
    { 
     UILocalNotification *localNotif = [[UILocalNotification alloc] init]; 
     if (localNotif == nil) 
      return; 
     NSDate *sleepDate = [[NSDate date] dateByAddingTimeInterval:i * 60]; 
     NSLog(@"Sleepdate is: %@", sleepDate); 

     localNotif.fireDate = sleepDate;  

     NSLog(@"fireDate is %@",localNotif.fireDate); 
     localNotif.timeZone = [NSTimeZone defaultTimeZone]; 
     localNotif.alertBody = [NSString stringWithFormat:NSLocalizedString(@"This is local notification %i"), i]; 

     localNotif.alertAction = NSLocalizedString(@"View Details", nil); 
     localNotif.soundName = UILocalNotificationDefaultSoundName; 
     localNotif.applicationIconBadgeNumber = 1; 

     [[UIApplication sharedApplication] scheduleLocalNotification:localNotif]; 
     NSLog(@"scheduledLocalNotifications are %@", [[UIApplication sharedApplication] scheduledLocalNotifications]); 
     [localNotif release]; 

    } 

    [pool release]; 
} 

Tiré d'un projet sur lequel je travaille maintenant, je peux confirmer que cela fonctionne comme prévu.

EDIT:
exemple a été répandu dans scheduleLocalNotifications parce que la manipulation du NSAutoreleasePool était absent - maintenant il est ajouté à l'exemple.

+0

Hey np .. c'est ce que nous sommes ici pour –

+1

Utiliser UIApplication hors du thread principal n'est pas sûr et peut provoquer des résultats inattendus.Je demanderais pourquoi vous avez besoin de le faire sur le fil. Si cela doit être hors thread, vous devez toujours exécuter 'scheduleLocalNotification' sur le thread principal pour être sûr. –

3

Une façon de faire des threads est avec est avec performSelectorInBackground.

Par exemple:

[myObj performSelectorInBackground:@selector(doSomething) withObject:nil]; 

Il faut noter, cependant, que Apple est assez fortement recommande que vous utilisez des concepts de plus haut niveau comme NSOperation s et Queues Dispatch au lieu de fils fraye explicitement. Voir la Concurrency Programming Guide

+0

Merci pour votre contribution! – Mazyod

+0

il plantage encore plus. :( –

Questions connexes