取消本地通知不起作用

Posted

技术标签:

【中文标题】取消本地通知不起作用【英文标题】:cancelLocalNotification does not working 【发布时间】:2015-07-13 00:02:55 【问题描述】:

我的应用中有大约 10 个本地通知(不在数组中)及其在开关中。我用了这段代码

    NSUserDefaults *defaultsB = [NSUserDefaults standardUserDefaults];
    UILocalNotification *notification = [[UILocalNotification alloc]init];

    if (switcher.on == 1) 

        NSCalendar *gregCalendar = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar];
        NSDateComponents *dateComponent = [gregCalendar components:NSYearCalendarUnit  | NSWeekCalendarUnit fromDate:[NSDate date]];

        [dateComponent setWeekday:1]; // For sunday
        [dateComponent setHour:[timeHClass.text integerValue]];
        [dateComponent setMinute:[timeMClass.text integerValue]];

        NSDate *fireDate = [gregCalendar dateFromComponents:dateComponent];


        [notification setAlertBody:textClass1.text];
        [notification setFireDate:fireDate];
        notification.soundName = @"bells.mp3";
        notification.repeatInterval = NSWeekCalendarUnit;
        [notification setTimeZone:[NSTimeZone defaultTimeZone]];
        [[UIApplication sharedApplication] scheduleLocalNotification:notification];


        [defaultsB setObject:@"ON" forKey:@"SwitchState"];
    
    else  

        UIApplication *app=[UIApplication sharedApplication];
        [app cancelLocalNotification:notification];



        [defaultsB setObject:@"OFF" forKey:@"SwitchState"];

    

但是当我关闭时通知仍然有效??

我应该将通知保存在 NSUserDefaults 中,而不仅仅是开关吗??

如果是的话怎么办??

【问题讨论】:

【参考方案1】:

如果您想取消现有通知,您需要通过 [[UIApplication sharedApplication] scheduledLocalNotifications] 获取对它的引用,然后遍历这些通知并找到您想要的通知(可能使用您在创建期间提供的唯一标识符)。

或者,如果您想取消所有通知,请替换:

[app cancelLocalNotification:notification];

与:

[app cancelAllLocalNotifications];

【讨论】:

所以你是说我应该放入数组来完成取消工作?但是我的方法行不通?如果每个通知都在单个开关中,我怎么能把它放在数组中?...我是初学者 @Faisal 如果您只是在应用中创建一个本地通知,只需使用[app cancelAllLocalNotifications]; 取消所有通知。如果您需要取消特定通知,我建议您关注this answer。

以上是关于取消本地通知不起作用的主要内容,如果未能解决你的问题,请参考以下文章

颤振本地通知声音不起作用

本地通知声音不起作用

通知的本地化不起作用

在应用商店中提交应用时本地通知不起作用

本地通知声音不起作用

自定义本地通知声音不起作用