objective-c - iOS 应用程序 : how to clear notification

我有一个 iOS 应用程序,其中一些推送通知被发送到。我的问题是,消息/通知保留在 iOS 的通知中心之后被点击。下次打开应用程序时,如何在通知中心中删除我的应用程序的通知?

我遇到过人们将 setApplicationIconBadgeNumber 调用为零值以清除通知的帖子。这对我来说似乎很奇怪,所以我相信也许存在另一种解决方案?

EDIT1:

我在清除通知时遇到了一些问题。请在此处查看我的代码:

- (void) clearNotifications {
    [[UIApplication sharedApplication] setApplicationIconBadgeNumber: 0];
    [[UIApplication sharedApplication] cancelAllLocalNotifications];
}

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    if (launchOptions != nil)
    {
        NSDictionary* dictionary = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
        if (dictionary != nil)
        {
            NSLog(@"Launched from push notification: %@", dictionary);

            [self clearNotifications];
        }
    }

    return YES;
}

- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo
{    
    NSLog(@"Received notification: %@", userInfo);
    [self clearNotifications];
}

我正在通过 Xcode 运行应用程序。当应用程序最小化并且我使用通知中心中的通知启动应用程序时,我可以在日志中看到调用了 didReceiveRemoteNotification 并使用断点,我可以看到 clearNotifications 已运行。但是通知仍然卡在通知中心。为什么?

最佳答案

很可能因为通知中心是一项相对较新的功能,Apple 不一定要推出一种全新的通知清除模式。因此,他们使用多用途的 [[UIApplication sharedApplication] setApplicationIconBadgeNumber: 0]; 来清除所述通知。这可能看起来有点奇怪,Apple future 可能会提供更直观的方式来做到这一点,但目前它是官方的方式。

我自己,我使用这个片段:

[[UIApplication sharedApplication] setApplicationIconBadgeNumber: 0];
[[UIApplication sharedApplication] cancelAllLocalNotifications];

它永远不会从通知中心清除所有应用程序的通知。

关于objective-c - iOS 应用程序 : how to clear notifications?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8682051/

相关文章:

objective-c - 检查方法是否存在

iphone - 如何制作 URL/电话可点击的 UILabel?

objective-c - 如何为多个子类使用单个 Storyboard uiviewcontrol

objective-c - 在 Objective-C 中获取对象属性列表

objective-c - 将 NSURL 转换为本地文件路径

ios - NSAttributedString 添加文本对齐

ios - UIAlertController 自定义字体、大小、颜色

ios - 在输入击键时获取 UITextField 的值?

objective-c - 使用 BOOL 属性

objective-c - 有条件地从 AppDelegate Storyboard中的不同位置开始