- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在下面的代码中,我检查当前任务(正在编辑的任务)是否有 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
编辑二:看起来像在针对 iOS 9 构建之前在应用程序中重复安排的本地通知无法取消..至少不容易...仍在努力寻找解决方案,因为我的应用程序围绕重复本地通知提醒!
编辑 III:在尝试取消应用程序后,我通过强制退出应用程序设法摆脱了挥之不去的、不可取消的通知……这似乎奏效了……这不是一个很好的解决方案,如果有某种替代方案,我当然不想让我的用户去做……我已经发布了 separate question看看是否有人有任何进一步的想法。
关于ios - cancelLocalNotification 似乎不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24659103/
我的应用程序中有大约 10 个本地通知(不在数组中)及其开关。我用了这段代码 NSUserDefaults *defaultsB = [NSUserDefaults standardUserD
在下面的代码中,我检查当前任务(正在编辑的任务)是否有 localNotification。如果是这样,我会尝试取消该通知。然后(如果 fireDate 尚未过去)我用(可能)更改的信息更新通知的 a
我相信我没有正确使用 cancelLocalNotification。 我有一个有条件运行的定期通知,它是使用以下代码创建的: let localNotification: UILocalNotifi
我需要在通过 cancelLocalNotification: 删除相同的 UILocalNotification 后显示它。问题是移除执行速度比触发新通知慢,并且移除刚刚添加的通知。 如何确定 UI
我是一名优秀的程序员,十分优秀!