[英]cancelLocalNotification doesn't seem to work
在下面的代码中,我检查当前任务(正在编辑的任务)是否具有localNotification。 如果是这样,我尝试取消该通知。 然后(如果还没有通过fireDate)我用(可能)已更改的信息更新通知的alertBody并重新安排它。
问题是,如果我创建一个通知然后进行编辑,最终会关闭两个通知。 不知何故,原始版本并没有被取消...
if ([currentTask localNotification])
{
[[UIApplication sharedApplication] cancelLocalNotification:[currentTask localNotification]];
if ([[NSDate date] compare:[currentTask localNotification].fireDate] == NSOrderedAscending)
{
NSLog(@"current task name: %@", [currentTask name]);
NSString *temp = [NSString stringWithFormat:@"Alert:\n%@", [currentTask name]];
[[currentTask localNotification] setAlertBody:temp];
[[UIApplication sharedApplication] scheduleLocalNotification:[currentTask localNotification]];
}
else
[currentTask setLocalNotification:nil];
}
对这里的问题有什么见解吗?
我知道在计划通知时会制作一份副本-cancelLocalNotification如何找到正确的副本? 它是否通过测试属性是否相等来做到这一点? 还是复制指针地址并将其匹配? 换句话说,如果更改了属性之一,cancelLocalNotification是否无法将其与最初计划的通知进行匹配?
我将在此处为iOS 9添加我的发现。以前,我的代码如下:
UILocalNotification* notification = getNotification();
[[UIApplication sharedApplication] cancelLocalNotification: notification];
notification.alertBody = newBody;
[[UIApplication sharedApplication] scheduleLocalNotification: notification];
在iOS 9之前,可以很好地工作,取消现有实例,然后使用新的alertBody或soundName重新安排它的时间。 然后是iOS 9,突然运行此代码实际上并没有取消先前的通知,因此我最终收到了比我想要的更多的通知!
对我来说,解决办法是不要懒惰地重用旧通知,因此现在创建一个新通知,并用旧通知的字段填充它。 工作请客!
编辑:我似乎仍然在[[UIApplication sharedApplication] cancelLocalNotification: notification]
在其他情况下无法正常工作...我的通知每分钟自动重复一次,看来Xcode 7.0中可能存在错误其有时被忽略: https : //forums.developer.apple.com/thread/9226
编辑II:似乎无法取消针对在针对iOS 9构建之前在应用中安排的重复本地通知..至少不容易...由于我的应用围绕重复本地通知而仍在努力寻找解决方案提醒!
编辑III:通过尝试取消应用程序后强制退出该应用程序,我设法摆脱了挥之不去,无法取消的通知……这似乎奏效了……这不是一个很好的解决方案,当然不是什么如果有其他选择,我想让我的用户来做...我已经发布了一个单独的问题,以查看是否有人有其他想法。
我遇到了同样的问题。 我使用的解决方案是。
// Sort the notification on the fire date of the notification.
NSSortDescriptor * fireDateDesc = [NSSortDescriptor sortDescriptorWithKey:@"fireDate" ascending:YES];
//get all scheduled notifications.
NSArray * notifications = [[[UIApplication sharedApplication] scheduledLocalNotifications] sortedArrayUsingDescriptors:@[fireDateDesc]];
// Cancel all scheduled notifications.
[[UIApplication sharedApplication] cancelAllLocalNotifications];
for (int i=0; i<[notifications count]; i++){
UILocalNotification* oneEvent = [notifications objectAtIndex:i];
// update notification data here an then schedule the notification.
[[UIApplication sharedApplication] scheduleLocalNotification:oneEvent];
}
逐个取消UILocalNotifications以更新通知中的某些内容会产生一个问题,有时通知不会被取消。
所以我实现的解决方案是:
1:获取所有计划的通知并将其存储在您喜欢的任何位置。
2:然后取消所有计划的通知。
3:从第一步循环到通知,更新您想要的任何内容,并在旅途中安排通知。
希望这可以帮助。
似乎自计划以来,UILocalNotification的任何属性均已更改,cancelLocalNotification将不起作用。 这使我认为cancelLocalNotification必须对照当前计划的通知副本检查不同属性的相等性,以查看哪个匹配。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.