2013-12-08 3 views
0

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

на мой взгляд CONTROLLER:

- (void)setupLocalNotifications { 
[[UIApplication sharedApplication] cancelAllLocalNotifications]; 

UILocalNotification *localNotification = [[UILocalNotification alloc] init]; 

totalSeconds = (setHour * 60 * 60) + (setMinute * 60) + (setSecond); 

NSDate *now = [NSDate date]; 
NSDate *dateToFire = [now dateByAddingTimeInterval:totalSeconds]; 

localNotification.fireDate = dateToFire; 
localNotification.alertBody = @"Timer Done"; 
localNotification.soundName = UILocalNotificationDefaultSoundName; 
localNotification.applicationIconBadgeNumber = 1; // increment 

NSDictionary *infoDict = [NSDictionary dictionaryWithObjectsAndKeys:@"Object 1", @"Key 1", @"Object 2", @"Key 2", nil]; 
localNotification.userInfo = infoDict; 

[[UIApplication sharedApplication] scheduleLocalNotification:localNotification]; 
} 

В МОЕЙ AppDelegate:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
// Override point for customization after application launch.; 

ScrollViewController *sv = [[ScrollViewController alloc] init]; 

UILocalNotification *notification = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey]; 

if (notification) { 
    [self showAlarm:notification.alertBody]; 
    NSLog(@"AppDelegate didFinishLaunchingWithOptions"); 
    application.applicationIconBadgeNumber = 0; 
} 

self.window.rootViewController = sv; // Make tab bar controller the root view controller 
[self.window makeKeyAndVisible]; 
return YES; 
} 

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification { 
[self showAlarm:notification.alertBody]; 
application.applicationIconBadgeNumber = 0; 
NSLog(@"AppDelegate didReceiveLocalNotification %@", notification.userInfo); 
} 

- (void)showAlarm:(NSString *)text { 
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Timer" 
                message:text 
                delegate:self 
              cancelButtonTitle:@"Stop Timer" 
              otherButtonTitles:nil]; 
[alertView show]; 
} 

Что происходит, я установил UILocalNotification, чтобы выйти после того, как прошло определенное пользователем количество секунд. Однако мое приложение позволяет приостановить таймер. Когда вы остановились, UILocalNotification продолжит работу и уйдет после того, как пройдут секунды. Есть ли способ приостановить локальное уведомление?

ответ

5

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

+0

Хорошо, спасибо. Это делается путем установки localNotification в nil? – user2397282

+0

@ user2397282: Нет. Если у вас есть только одно уведомление, самым простым методом является вызов '[[UIApplication sharedApplication] cancelAllLocalNotifications]'. –

+0

Или сохраните указатель на объект уведомления и используйте cancelLocalNotification, если их несколько, и вы хотите его отменить. –