UILocalNotification已启动但未显示,或在通知中心显示但不可见,或者像魅力一样触发

时间:2014-05-29 17:37:30

标签: ios iphone uilocalnotification

过去几天我一直在为我的应用上的本地通知而苦苦挣扎。

基本上,目标是在用户处理地址时弹出通知。

这是代码:

NSMutableArray *notifications = [@[] mutableCopy];
for (CCAddress *address in results) {
    CCCategory *category = [address.categories.allObjects firstObject];
    NSDictionary *userInfo = @{@"addressId" : address.identifier};
    UILocalNotification *localNotification = [UILocalNotification new];

    if (category == nil)
        localNotification.alertBody = [NSString stringWithFormat:@"Vous êtes proche de %@", address.name];
    else
        localNotification.alertBody = [NSString stringWithFormat:@"Vous êtes proche de %@, %@", address.name, category.name];
    localNotification.alertAction = @"Linotte";
    localNotification.soundName = UILocalNotificationDefaultSoundName;
    localNotification.userInfo = userInfo;

    [notifications addObject:localNotification];

    address.lastnotif = [NSDate date];
}
[managedObjectContext saveToPersistentStore:NULL];

[UIApplication sharedApplication].scheduledLocalNotifications = notifications;

结果实际上是完全随机的,但有一些我肯定知道:地理围栏效果很好,你可以看到我在lastNotif中设置了通知的日期,所以我知道它们被解雇的时间。

有时候我会看到通知弹出,但不会留在通知中心,但大部分时间没有任何反应,即使我看到它实际被解雇的日期,有时候一切都很顺利。

我尝试过很多东西,比如使用presentLocalNotificationNow,设置fireDate,每个之间有1秒的延迟,以及其他我甚至不记得的东西......

所以,显然我在文档中遗漏了一些东西,但是什么?

感谢。

PS:应用程序处于后台或关闭时,我知道didReceiveLocalNotification。

PS2:我实际上不知道那些我根本没看到的人是否真的被解雇了,因为他们没有出现在通知中心,所以也许他们被解雇但我绝对没办法看到他们当他们这样做的时候,我看不到手机的屏幕。

编辑:所以,我一直在家里做一些测试,电话关闭,屏幕锁定。真正的综合症是,当一个通知弹出时,它只会打开屏幕,手机振动(我声音关闭),然后没有...

3 个答案:

答案 0 :(得分:0)

我没有看到您正在设置fireDate。我不记得那个默认值是什么。

答案 1 :(得分:0)

好的,按照预期,它有点愚蠢。

在我发布的代码之前,我有:

if ([results count] == 0) {
    [UIApplication sharedApplication].applicationIconBadgeNumber = 0;
    return;
}

但是,当您将applicationIconBadgeNumber设置为0时,它会从通知中心删除所有通知!

文档中没有说明这一点(https://developer.apple.com/library/ios/documentation/uikit/reference/UIApplication_Class/Reference/Reference.html)。

答案 2 :(得分:0)

您需要在registerUserNotificationSettings中添加didFinishLaunchingWithOptions,它会向我们发送通知提醒

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

    if ([UIApplication instancesRespondToSelector:@selector(registerUserNotificationSettings:)]){
        [application registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound categories:nil]];
    }
    UILocalNotification *localNotification = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];
    if (localNotification) {
        application.applicationIconBadgeNumber = 0;
    }

    return YES;
}