gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:01:54 24 4
gpt4 key购买 nike

在我的应用程序中,永远不会调用方法 - (void)application:(UIApplication *)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 setObject:@YES forKey:KEY_RESCHEDULE];
NSInteger row = [_wurmProphylaxePickerView selectedRowInComponent:0];
switch (row) {
case 0:
[myUserInfo setValue:@2 forKey:KEY_FREQUENCY];
break;
case 1:
[myUserInfo setValue:@4 forKey:KEY_FREQUENCY];
break;
case 2:
[myUserInfo setValue:@6 forKey:KEY_FREQUENCY];
break;
default:
[myUserInfo setValue:@4 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)application:(UIApplication *)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...

最佳答案

如果通知触发时应用未激活,您将在 didFinishLaunchingWithOptions 中处理此问题,如 Local and Push Notifications Programming Guide处理本地和远程通知部分中的示例所示:

- (BOOL)application:(UIApplication *)app didFinishLaunchingWithOptions:(NSDictionary *)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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com