iOS创建本地通知和删除对应的通知,工作日通知

本文的代码主要是:创建本地通知,删除对应的本地通知,创建工作日闹钟

直接上代码:

//
//  ViewController.m
//  LocalNSNotification
//
//  Created by wusiping on 16/1/27.
//  Copyright © 2016年 wusiping. All rights reserved.
//

#import "ViewController.h"
#define LOCAL_NOTIFY_SCHEDULE_ID @"hahahhahahhah"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    UIButton *createBtn = [[UIButton alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];
    [createBtn setTitle:@"创建通知" forState:UIControlStateNormal];
    createBtn.titleLabel.textColor = [UIColor blackColor];
    createBtn.backgroundColor = [UIColor lightGrayColor];
    [createBtn addTarget:self action:@selector(createNSNotification) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:createBtn];

    UIButton *cancelBtn = [[UIButton alloc]initWithFrame:CGRectMake(100, 300, 100, 100)];
    [cancelBtn setTitle:@"删除通知" forState:UIControlStateNormal];
    cancelBtn.titleLabel.textColor = [UIColor blackColor];
    cancelBtn.backgroundColor = [UIColor lightGrayColor];
    [cancelBtn addTarget:self action:@selector(cancelNSNotification) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:cancelBtn];

}

- (NSDate *)getCurrrentTimeToSS
{
    NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
    [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
    [formatter dateFormat];
    [NSDate date];
    return [NSDate date];

}

- (void)createNSNotification{

    UILocalNotification *localNotification = [[UILocalNotification alloc] init];
    if (localNotification == nil) {
        return;
    }
    //设置本地通知的触发时间(如果要立即触发,无需设置),这里设置为20妙后
    localNotification.fireDate = [NSDate dateWithTimeIntervalSinceNow:20];
    //设置本地通知的时区
    localNotification.timeZone = [NSTimeZone defaultTimeZone];
    //设置通知的内容
    localNotification.alertBody = @"hahhah";
    //设置通知动作按钮的标题
    localNotification.alertAction = @"查看";
    //设置提醒的声音,可以自己添加声音文件,这里设置为默认提示声
    localNotification.soundName = UILocalNotificationDefaultSoundName;
    //设置通知的相关信息,这个很重要,可以添加一些标记性内容,方便以后区分和获取通知的信息
    NSDictionary *dict =[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:9529],@"nfSignInkey",nil];
    [localNotification setUserInfo:dict];

    // ios8后,需要添加这个注册,才能得到授权
    if ([[UIApplication sharedApplication] respondsToSelector:@selector(registerUserNotificationSettings:)]) {
        UIUserNotificationType type =  UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound;
        UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:type
                                                                                 categories:nil];
        [[UIApplication sharedApplication] registerUserNotificationSettings:settings];
        // 通知重复提示的单位,可以是天、周、月
        localNotification.repeatInterval = NSCalendarUnitDay;
    } else {
        // 通知重复提示的单位,可以是天、周、月
        localNotification.repeatInterval = NSDayCalendarUnit;
    }

    //在规定的日期触发通知
    [[UIApplication sharedApplication] scheduleLocalNotification:localNotification];

}

/**
 *  删除当前的通知
 */

- (void)cancelNSNotification{

    //   手动删除通知
    //   这里我们要根据我们添加时设置的key和自定义的ID来删
        NSArray *narry=[[UIApplication sharedApplication] scheduledLocalNotifications];
        NSUInteger acount=[narry count];
        if (acount>0)
        {
            // 遍历找到对应nfkey和notificationtag的通知
            for (int i=0; i<acount; i++)
            {
                UILocalNotification *myUILocalNotification = [narry objectAtIndex:i];
                NSDictionary *userInfo = myUILocalNotification.userInfo;
                NSNumber *obj = [userInfo objectForKey:@"nfSignInkey"];
                int mytag=[obj intValue];
                if (mytag==9529)
                {
                    // 删除本地通知
                    [[UIApplication sharedApplication] cancelLocalNotification:myUILocalNotification];
                    break;
                }
            }
        }
}

@end

大家可能会遇到工作日闹钟这种需求:
 if ([cycle isEqual:@"工作日"]) {//如果是工作日闹钟
            NSDate *now=select;//当前时间
            NSCalendar *gregorian = [NSCalendar currentCalendar];
            NSDateComponents *dateComps = [gregorian components:NSWeekdayCalendarUnit fromDate:now];
            NSInteger daycount = [dateComps weekday]-2;
            NSDate *weekdaybegin=[now addTimeInterval:-daycount*60*60*24];
            for (int i=0;i<5;i++) {//创建5个通知:星期一到星期五
                NSDate *now= [weekdaybegin addTimeInterval:i*60*60*24];
                [self creatmessage:now];
            }
   }

-(void)creatmessage:(NSDate *)new
{
    UILocalNotification *notification=[[UILocalNotification alloc] init];
    if (notification!=nil && select!=nil &&cycle.length > 0 &&key.intValue==1)
    {
        //触发通知时间
        //[self cancelUILocalNotification];
        NSDate *now= new;
        NSLog(@"%@",now);
        NSDate *today = [self getCurrrentTimeToDay];
        BOOL isSameDay = [self isSameDay:now date2:today];
        if (isSameDay == YES){//特殊需求..这个不要管
            //今天所在的星期X,延迟一个礼拜触发。比如今天是星期三,那下个礼拜三才开始闹钟。明天是星期四,星期四的闹钟还是明天就触发

            now = [NSDate dateWithTimeInterval:24*60*60*7 sinceDate:now];

        }
        notification.fireDate=now;
        notification.timeZone=[NSTimeZone defaultTimeZone];
        notification.repeatInterval = kCFCalendarUnitWeek;
        notification.soundName=@"铃声.m4r";
        notification.alertBody=@"今天iSite签到没?千万不要忘了哦!";
        notification.alertAction=NSLocalizedString(@"今天iSite签到没?千万不要忘了哦!", nil);
        NSDictionary *dict =[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:9529],@"nfSignInkey",nil];
        [notification setUserInfo:dict];

        // 启用这个通知
        [[UIApplication sharedApplication]   scheduleLocalNotification:notification];
    }

}

 
时间: 2024-11-03 05:39:08

iOS创建本地通知和删除对应的通知,工作日通知的相关文章

iOS 创建文件夹,删除文件夹,对文件夹重命名的操作

iOS 创建文件夹,删除文件夹,对文件夹重命名的操作 by 伍雪颖 + (void)createFolder:(NSString *)folderName { NSString *imageDir = [NSString stringWithFormat:@"%@/Documents/%@", NSHomeDirectory(),folderName]; NSLog(@"HomeDir: %@",imageDir); BOOL isDir = NO; NSFileM

iOS的本地推送删除不了解决方法

最近在研究苹果推送,当测试本地推送的时候,发现一个问题,就是一旦你添加了一个本地推动的通知,当你修改代码,删除应用,当你再次运行app,它还是会在横幅上面弹出推送,尼玛怎么搞都删除不了,近乎崩溃了,开始以为是ios7的Bug,苹果爹自ios7之后各种bug曾出不穷,不过最后冷静思考了一下,有木有可能App本地的推送是设置系统里面,所以你在app删除本地推送的代码都没办法取消推送,于是终于给我找到了一个 cancelAllLocalNotifications方法,尼玛,蛋疼的本地推送终于不见了..

iOS开发---本地通知(UILocalNotification)

iOS开发---本地通知(UILocalNotification) 标签: ios本地通知 2016-07-12 10:28 1437人阅读 评论(0) 收藏 举报  分类: iOS(25)  版权声明:本文为博主原创文章,转载请注明出处. iOS中通知机制又叫消息机制,其包括两类:一类是本地通知:另一类是推送通知,也叫远程通知. 本地通知是由本地应用触发的,它是基于时间行为的一种通知形式,例如闹钟定时.待办事项提醒,又或者一个应用在一段时候后不使用通常会提示用户使用此应用等都是本地通知.创建一

iOS开发--本地通知与远程通知

iOS开发--本地通知与远程通知 作者 雷潮 关注 2016.02.01 00:18* 字数 1921 阅读 8898评论 1喜欢 41 这里是指推送通知跟NSNotification有区别: 1.NSNotification是系统内部发出通知,一般用于内部事件的监听,或者状态的改变等等,是不可见的2.本地通知与远程通知是可见的,主要用于告知用户或者发送一些App的内容更新,推送一些相关的消息,让用户知道App内部发生了什么事情. Paste_Image.png iOS常用通知 1.本地推送通知

iOS开发——本地通知

本地通知是由本地应用触发的,它是基于时间行为的一种通知形式,例如闹钟定时.待办事项提醒,又或者一个应用在一段时候后不使用通常会提示用户使用此应用等都是本地通知.创建一个本地通知通常分为以下几个步骤: 创建UILocalNotification. 设置处理通知的时间fireDate. 配置通知的内容:通知主体.通知声音.图标数字等. 配置通知传递的自定义数据参数userInfo(这一步可选). 调用通知,可以使用scheduleLocalNotification:按计划调度一个通知,也可以使用pr

iOS 注册本地通知(推送)

注:按Home键让App进入后台运行时,方可查看通知. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. // 注册本地通知 UILocalNotification *localnotifit = [[U

iOS 图片本地存储、本地获取、本地删除

在iOS开发中.经常用到图片的本地化. iOS 图片本地存储.本地获取.本地删除,可以通过以下类方法实现. p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #008400; background-color: #ffffff } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #000000; background-color

iOS开发本地通知

/* 本地通知:不通过网络,在本地实现的通知,自己发给自己 远程通知:必须通过网络,使用推送技术(APNs),实现通知 本地通知: 1.要完成可以接收的通知形式的注册 2.具体通知的设置 3.发送通知 */ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization

iOS简单直播实现(一:创建本地rtmp服务器)

由于业务需求,需要从腾讯直播sdk要迅速转移到自主开发(先让我默哀三分钟).不多说,直接开始唠嗑! 这个项目超级简单,简单到只能一个推流,一个拉流的功能.需求多的再另谈. 前期准备:推流用优酷开源的LFLiveKit框架. 拉流(实际上就是一个播放器)用ijkplayer 框架,当然这个也是开源的. 创建本地rtmp服务器 创建本地rtmp服务器.(这个地方坑比较多,老夫深陷其中欲罢不能) 一.打开终端, 查看是否已经安装了Homebrew, 直接终端输入命令 man brew 如果已经安装就会