Настройка локальных уведомлений в новой теме? - PullRequest
4 голосов
/ 30 ноября 2010

Мне нужно знать, возможно ли создать новый поток для обработки локальных уведомлений.

Мое приложение сильно зависит от этих уведомлений, поэтому я хочу, чтобы приложение работало, пока телефон устанавливает уведомления.

Пример:

(сейчас)

при запуске приложения приложение висит на заставке для установки локальных уведомлений, затем запускается.

(я хочу)

Приложение запускается и может использоваться, пока настроены локальные уведомления.

Мне тоже нужен пример кода, пожалуйста:)

(длязапись, я устанавливаю 60 локальных уведомлений каждый раз, когда приложение выходит на передний план по моим собственным причинам ...)

Спасибо !!

Ответы [ 2 ]

3 голосов
/ 30 ноября 2010

Да, это можно сделать, я делаю это все время:

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

Взятый из проекта, над которым я сейчас работаю, я могу подтвердить, что он работает как положено.

EDIT:
Пример протекал в scheduleLocalNotifications, потому что обработка NSAutoreleasePool отсутствовала - теперь он добавлен в пример.

3 голосов
/ 30 ноября 2010

Один из способов создания темы - с помощью performSelectorInBackground.

Например:

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

Однако вы должны заметить, что Apple довольно настоятельно рекомендует использовать концепции более высокого уровня, такие как NSOperation s и Dispatch Queues вместо явных потоков,См. Руководство по программированию параллелизма

...