0

我在下面有一个问题:

  • 当通过按主页按钮将应用程序最小化到后台时,每 5 分钟创建一个弹出的本地通知。
  • 从后台删除应用程序。-->我预期的然后小狗只显示应用程序存在时,当从后台删除应用程序时它被丢弃。

我的问题是本地通知仍然处于活动状态,并且在将其从后台删除后仍每 5 分钟显示一次弹出窗口。

我怎样才能阻止它?请帮我!先谢谢了。

4

2 回答 2

2

把它放在应用程序委托中。当应用程序进入后台时,它将删除所有本地通知。

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    [[UIApplication sharedApplication] cancelAllLocalNotifications];
}
于 2012-07-23T07:34:13.050 回答
1

如果您不想取消所有通知...我已经设置了一个唯一标识符,存储在通知的 userInfo 字典中。当我想删除时,我会快速枚举所有通知并选择正确的通知进行删除。

我在这里的绊脚石是记住存储我为通知创建的 UUID,还记得在快速枚举中使用 isEqualToString。我想我也可以使用特定的名称字符串而不是唯一标识符。如果有人可以让我知道比快速枚举更好的方法,请告诉我。

@interface myApp () {
    NSString *storedUUIDString; 
}

- (void)viewDidLoad {
    // create a unique identifier - place this anywhere but don't forget it! You need it to identify the local notification later
    storedUUIDString = [self createUUID]; // see method lower down
}

// Create the local notification
- (void)createLocalNotification {
    UILocalNotification *localNotif = [[UILocalNotification alloc] init];
    if (localNotif == nil) return;
    localNotif.fireDate = [self.timerPrototype fireDate];
    localNotif.timeZone = [NSTimeZone defaultTimeZone];
    localNotif.alertBody = @"Hello world";
    localNotif.alertAction = @"View"; // Set the action button
    localNotif.soundName = UILocalNotificationDefaultSoundName;
    NSDictionary *infoDict = [NSDictionary dictionaryWithObject:storedUUIDString forKey:@"UUID"];
    localNotif.userInfo = infoDict;

    // Schedule the notification and start the timer
    [[UIApplication sharedApplication] scheduleLocalNotification:localNotif]; 
}

// Delete the specific local notification
- (void) deleteLocalNotification { 
// Fast enumerate to pick out the local notification with the correct UUID
    for (UILocalNotification *localNotification in [[UIApplication sharedApplication] scheduledLocalNotifications]) {        
    if ([[localNotification.userInfo valueForKey:@"UUID"] isEqualToString: storedUUIDString]) {
        [[UIApplication sharedApplication] cancelLocalNotification:localNotification] ; // delete the notification from the system            
        }
    }
}

// Create a unique identifier to allow the local notification to be identified
- (NSString *)createUUID {
    CFUUIDRef theUUID = CFUUIDCreate(NULL);
    CFStringRef string = CFUUIDCreateString(NULL, theUUID);
    CFRelease(theUUID);
    return (__bridge NSString *)string;
}

在过去 6 个月的某个时候,上述大部分内容可能已从 StackOverflow 中删除。希望这可以帮助

于 2012-07-23T08:48:30.530 回答