Не NSTimer или applicationSignificantTimeChange, тогда что мне использовать? - PullRequest
0 голосов
/ 11 ноября 2010

Я хочу, чтобы текст менялся один раз в день, даже если мое приложение не открыто в то время, когда NSTimer не запускается, когда ваше приложение закрыто, applicationSignificantTimeChange не получит сообщение, если мое приложение будет закрыто.

Что мне нужно сделать, это.

(1) получить текущую дату (2) выбрать фразу на основе текущей даты и (3) обновить ярлык

Я все еще мог бы использовать NSTimer или applicationSignificantTimeChange для обработки случая, когда мое приложение было открыто в полночь, но мне нужно, чтобы сначала работал метод выбора фраз, чтобы мой таймер или метод изменения времени могли вызыватьэто в полночь для новой даты

Может кто-нибудь помочь мне с этой проблемой и что мне нужно сделать, чтобы это работало?

Ответы [ 2 ]

4 голосов
/ 11 ноября 2010

Надеюсь, этот код достаточно хорош, чтобы остановить все подобные вопросы, которые вы задаете слишком часто.
Да, урок на будущее: доставьте мне много вопросов в интересующих меня категориях, и я передам код.

- (void)updateLabelForDate:(NSDate *)date {
    NSTimeInterval timeInterval = [date timeIntervalSinceReferenceDate];
    NSInteger days = timeInterval / (60*60*24);
    NSArray *sloganArray = [NSArray arrayWithObjects:
                            NSLocalizedString(@"Slogan for day 1", nil),
                            NSLocalizedString(@"Slogan for day 2", nil),
                            NSLocalizedString(@"Slogan for day 3", nil),
                            NSLocalizedString(@"I'll hope you'll get it", nil),
                            nil];
    NSInteger usedSloganIndex = (int)days % [sloganArray count];
    NSString *slogan = [sloganArray objectAtIndex:usedSloganIndex];
    NSLog(@"Slogan: %@", slogan);
}

- (void)applicationSignificantTimeChange:(UIApplication *)application {
    [self updateLabelForDate:[NSDate date]];
}

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
    [self.window addSubview:viewController.view];
    [self.window makeKeyAndVisible];
    [self updateLabelForDate:[NSDate date]];
    // the following is there to prove that this code works.
    NSDate *date = [NSDate date];
    for (int i = 0; i < 10; i++) {
        NSLog(@"Date: %@", date);
        [self updateLabelForDate:date];
        date = [date dateByAddingTimeInterval:(60*60*24)];
    }
    return YES;
}

- (void)applicationDidBecomeActive:(UIApplication *)application {
    [self updateLabelForDate:[NSDate date]];
}
0 голосов
/ 11 ноября 2010

Вы не можете, если приложение не запущено.

Однако вы можете использовать «Локальное уведомление» - что-то вроде «Push-уведомления» - за исключением того, что оно отправляется вашим собственнымУстройство - чтобы сказать вам, что приложение требует внимания.Это может быть запланировано.

http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Introduction/Introduction.html

...