2010-11-30 5 views
4

Ich muss wissen, ob es möglich ist, einen neuen Thread für die Einstellung lokaler Benachrichtigungen zu erstellen.Lokale Benachrichtigungen für einen neuen Thread festlegen?

Meine App hängt stark von diesen Benachrichtigungen ab, daher möchte ich die App funktionieren lassen, während das Telefon die Benachrichtigungen setzt.

Beispiel:

(jetzt) ​​

Sie die App starten, hängt die App auf dem Startbildschirm die lokalen Meldungen zu setzen, dann startet es.

(Ich will)

Die App startet und wieder verwendbar ist, während die lokale Benachrichtigungen eingestellt sind.

Ich brauche einige Code-Beispiel auch bitte

(für das Protokoll, ich bin 60 lokale Benachrichtigungen jedes Mal, wenn die App für meine eigenen Gründe ... betritt Vordergrund Einstellung) :)

Dank! !

Antwort

3

Ja, das getan werden kann, kann ich es die ganze Zeit:

- (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]; 
} 

aus einem Projekt Taken ich jetzt arbeite, kann ich bestätigen, dass es wie erwartet funktioniert.

EDIT:
Beispiel wurde in scheduleLocalNotifications undicht, weil der Umgang mit NSAutoreleasePool fehlte - jetzt ist es zu dem Beispiel.

+0

Hey np .. das ist, was wir hier sind für –

+1

UIApplication aus dem Haupt-Thread ist nicht sicher und kann 'Unerwartete Ergebnisse' verursachen. Ich würde fragen, warum Sie es aus Thread tun müssen. Ich bezweifle, dass es aufgeht Wenn es sich um einen Off-Thread handeln muss, müssen Sie "scheduleLocalNotification" im Hauptthread ausführen, um sicher zu sein. –

3

Eine Möglichkeit, Threads zu tun, ist mit ist mit performSelectorInBackground.

Zum Beispiel:

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

Sie sollten jedoch beachten, dass Apple ziemlich stark empfiehlt, dass Sie übergeordnete Konzepte wie NSOperation s und Dispatch-Warteschlangen statt explizit Laichen Threads verwenden. Siehe Concurrency Programming Guide

+0

Danke für Ihren Beitrag! – Mazyod

+0

es stürzt noch mehr. :( –