2010-11-30 22 views
4

我需要知道是否有可能創建一個新線程來處理設置本地通知。在新線程上設置本地通知?

我的應用程序在很大程度上依賴於這些通知,因此我希望在手機設置通知時使應用程序正常工作。

例子:

(現在)

你啓動應用程序,該應用程序在啓動畫面掛起設置本地通知,然後將其啓動。

(我想)

應用程序啓動和而本地通知設置是可用的。

我需要一些示例代碼,也請:)

(備案,我設置的每個應用程序進入前景爲我自己的原因時...... 60個本地通知)

謝謝! !

回答

3

是的,這是可以做到的,我做這一切的時候:

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

從項目我現在工作的服用,我可以證實,它將按預期工作。

編輯:
例子是在漏水,因爲scheduleLocalNotifications處理NSAutoreleasePool失蹤 - 現在它加入的例子。

3

執行線程的一種方法是用performSelectorInBackground

例如:

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

您應該注意,但是,蘋果是相當強烈建議您使用更高級的概念,如NSOperation S和調度隊列而是明確產卵線程。見Concurrency Programming Guide

+0

感謝您的貢獻! – Mazyod 2010-11-30 18:30:13

+0

它崩潰的更多。 :( – 2013-10-23 06:26:52