我有以下问题:
我有2个日历,它们都需要创建本地通知(在每个事件发生前5分钟会触发)。在设置中,用户可以为任一日历打开或关闭通知。如果用户最初使用两个日历的通知,现在只想使用一个日历的通知,那么如何才能删除一个日历中的通知?
我想我有3个选择:
[[UIApplication sharedApplication] cancelAllLocalNotifications];
,然后将其他日历中的所有内容添加回来(这可能比听起来更难)。[[UIApplication sharedApplication] cancelLocalNotification:notification];
UILocalNotification
进行子类化并添加一些允许我对通知进行排序的字段。然后也许我可以调用[[UIApplication sharedApplication] scheduledLocalNotifications]
并循环检查该字段并删除那些必要的字段。有没有一种标准的方法可以做到这一点?我认为第三个可能是最简单的,但我不确定它是否会起作用。
答案 0 :(得分:0)
UILocalNotification
具有标准userInfo
属性,只要键是有效的属性列表类型,就是NSDictionary
任意值。如果您继承UILocalNotification
,则必须将该字典用作后续存储,以用于您希望保留的其他属性或字段。为了能够使用您的子类,您将需要一个初始化方法,该方法将属性从基类复制到您的子类。
#define kNoficationCalendarName NSStringFromSelector(@selector(calendarName))
@interface XXLocalNotification : UILocalNotification
@property (nonatomic, strong) NSString * calendarName;
- (instancetype)initWithLocalNotification:(UILocalNotification *)notification;
@end
@implementation XXLocalNotification
- (instancetype)initWithLocalNotification:(UILocalNotification *)notification
{
self = [super init];
if (self)
{
//Copy properties
self.alertAction = notification.alertAction;
self.alertBody = notification.alertBody;
self.alertLaunchImage = notification.alertLaunchImage;
self.applicationIconBadgeNumber = notification.applicationIconBadgeNumber;
self.fireDate = notification.fireDate;
self.hasAction = notification.hasAction;
self.repeatCalendar = notification.repeatCalendar;
self.repeatInterval = notification.repeatInterval;
self.soundName = notification.soundName;
self.timeZone = notification.timeZone;
self.userInfo = notification.userInfo;
}
return self;
}
-(void)setCalendarName:(NSString *)calendarName
{
NSMutableDictionary * userInfo = [[self userInfo] mutableCopy];
[userInfo setValue:calendarName
forKey:kNoficationCalendarName];
}
- (NSString *)calendarName
{
return [[self userInfo] valueForKey:kNoficationCalendarName];
}
@end