• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - App Delegate 的应用程序 :didReceiveLocalNotification: not called

[复制链接]
菜鸟教程小白 发表于 2022-12-12 13:53:39 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

在我的应用委托(delegate)中,方法 - (void)applicationUIApplication *)application didReceiveLocalNotification: (UILocalNotification *)notification 永远不会被调用。

这就是我创建通知的方式:

UILocalNotification *notification = [[UILocalNotification alloc] init];
// set UUID, which we will store in userDefaults for later
NSMutableDictionary *myUserInfo = [[NSMutableDictionary alloc] init];
NSString *uuid = [[NSProcessInfo processInfo] globallyUniqueString];
[myUserInfo setValue:uuid forKey:KEY_UUID];
[myUserInfo setValue"month" forKey:KEY_UNIT];
[myUserInfo setObjectYES forKey:KEY_RESCHEDULE];
NSInteger row = [_wurmProphylaxePickerView selectedRowInComponent:0];
switch (row) {
    case 0:
        [myUserInfo setValue2 forKey:KEY_FREQUENCY];
        break;
    case 1:
        [myUserInfo setValue4 forKey:KEY_FREQUENCY];
        break;
    case 2:
        [myUserInfo setValue6 forKey:KEY_FREQUENCY];
        break;
    default:
        [myUserInfo setValue4 forKey:KEY_FREQUENCY];
        break;
}
notification.userInfo = myUserInfo;
// calculate date for next notification, depends on the user's selection
NSDate *today = [NSDate date];
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *myComps = [[NSDateComponents alloc] init];
[myComps setMinute:1];
notification.fireDate = [calendar dateByAddingComponents:myComps toDate:today options:0];
notification.timeZone = [NSTimeZone localTimeZone];
notification.alertBody = @"My alertBody";
[[UIApplication sharedApplication] scheduleLocalNotification:notification];

这是在我的应用委托(delegate)中,但从未被调用:

- (void)applicationUIApplication *)application didReceiveLocalNotification:    (UILocalNotification *)notification
{
    NSDictionary *userInfo = notification.userInfo;
    BOOL repeat = [[userInfo objectForKey:KEY_RESCHEDULE] boolValue];
    if (repeat)
    {
        NSInteger frequency = (NSInteger)[userInfo objectForKey:KEY_FREQUENCY];
        NSString *unit = (NSString *)[userInfo objectForKey:KEY_UNIT];
        NSString *uuid = (NSString *)[userInfo objectForKey:KEY_UUID];

        // calculate date for next notification
        NSDate *today = [NSDate date];
        NSCalendar *calendar = [NSCalendar currentCalendar];
        NSDateComponents *myComps = [[NSDateComponents alloc] init];
        if ([unit isEqualToString"month"]) {
            //[myComps setMonth:frequency];
            [myComps setMinute:frequency];
        } else {

        }

        // create new notification
        UILocalNotification *newNotification = [[UILocalNotification alloc] init];
        newNotification.fireDate = [calendar dateByAddingComponents:myComps toDate:today options:0];
        newNotification.timeZone = [NSTimeZone localTimeZone];
        newNotification.alertAction = notification.alertAction;
        newNotification.alertBody = notification.alertBody;
        newNotification.userInfo = notification.userInfo;

        // schedule it
        [[UIApplication sharedApplication] scheduleLocalNotification:newNotification];     
    }
}

在 iOS 8 上测试,不确定 iOS 7...



Best Answer-推荐答案


如果在通知触发时应用程序未处于事件状态,您将在 didFinishLaunchingWithOptions 中进行处理,如 Local and Push Notifications Programming Guide处理本地和远程通知 部分中的示例所示:

- (BOOL)applicationUIApplication *)app didFinishLaunchingWithOptionsNSDictionary *)launchOptions {
    UILocalNotification *localNotif =
        [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];
    if (localNotif) {
        NSString *itemName = [localNotif.userInfo objectForKey:ToDoItemKey];
        [viewController displayItem:itemName];  // custom method
        app.applicationIconBadgeNumber = localNotif.applicationIconBadgeNumber-1;
    }
    [window addSubview:viewController.view];
    [window makeKeyAndVisible];
    return YES;
}

如果在通知触发时应用程序处于事件状态,则调用 didReceiveLocalNotification

关于ios - App Delegate 的应用程序 :didReceiveLocalNotification: not called,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28073152/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap