繁体   English   中英

cancelLocalNotification似乎不起作用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM