我在下面有一个问题:
- 当通过按主页按钮将应用程序最小化到后台时,每 5 分钟创建一个弹出的本地通知。
- 从后台删除应用程序。-->我预期的然后小狗只显示应用程序存在时,当从后台删除应用程序时它被丢弃。
我的问题是本地通知仍然处于活动状态,并且在将其从后台删除后仍每 5 分钟显示一次弹出窗口。
我怎样才能阻止它?请帮我!先谢谢了。
我在下面有一个问题:
我的问题是本地通知仍然处于活动状态,并且在将其从后台删除后仍每 5 分钟显示一次弹出窗口。
我怎样才能阻止它?请帮我!先谢谢了。
把它放在应用程序委托中。当应用程序进入后台时,它将删除所有本地通知。
- (void)applicationDidEnterBackground:(UIApplication *)application
{
[[UIApplication sharedApplication] cancelAllLocalNotifications];
}
如果您不想取消所有通知...我已经设置了一个唯一标识符,存储在通知的 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 中删除。希望这可以帮助