ios - 从 AppDelegate 中的 NSMutableDictionary 清除几个推送通知

标签 ios iphone objective-c push-notification apple-push-notifications

我正在尝试更改 AppDelegate 中推送通知的数量。

我创建了一个属性并将其合成到 AppDelegate.h 中,用于存储带有通知数据的 NSDictionary。

@property (strong,nonatomic) NSMutableDictionary *pushArray;

当我收到通知时,我会这样做:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
   _pusharray = [[userInfo valueForKey:@"aps"] valueForKey:@"badges"];
}

我在另一个文件(例如 mainViewController)中收到通知,但我无法删除 _pusharray 中的项目。 我是这样做的:

- (IBAction)touchMaenuButtons:(id)sender {
    NSUInteger index = [self.menuButtons indexOfObject:sender];
    NSMutableDictionary *pushArray = [(AppDelegate *)[[UIApplication sharedApplication] delegate] pushArray];
    NSString *key = [NSString stringWithFormat:@"%lu",(unsigned long)index];
    UIButton *button = [_badges objectAtIndex:index];
    [button setTitle:@"" forState:UIControlStateNormal];
    button.hidden=YES;
    [pushArray removeObjectForKey:key];
}

在最后的字符串中我收到错误:

* 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[__NSDictionaryI removeObjectForKey:]:无法识别的选择器发送到实例 0x145a78a0”

请有人告诉我如何更正它。

最佳答案

它不是一个可变的字典

您应该使用下面的初始化程序来使字典可变。

_pusharray = [NSMutableDictionary dictionaryWithDictionary:[[userInfo valueForKey:@"aps"] valueForKey:@"badges"]];

另外,作为一种风格,不要将字典称为数组

也是个人不喜欢看这个

[(AppDelegate *)[[UIApplication sharedApplication] delegate] pushArray];

如果您需要这种功能,请创建您自己的单例,不要用这种东西让应用程序代理重载。应用委托(delegate)用于系统与您的应用对话,您应该尽可能避免将应用逻辑放在这里。

关于ios - 从 AppDelegate 中的 NSMutableDictionary 清除几个推送通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21935635/

相关文章:

ios - CoreData 并发 - 我需要一个单独的 NSOperationQueue 吗?

iphone - 如何更改 AVCaptureVideoDataOutput 的视频方向

iphone - 如何在不使用 NSTimer 的情况下每 10 秒触发一次方法?

iphone - 检查 managedobjectcontext 是否为空?

ios - 调用 didSelectRowAtIndexPath 时字符串变为空白

objective-c - 在包 NSBundle 中找不到名为 'Main' 的 Storyboard

ios - CoreData 关系 1-多和 1 对多

ios - 通过 Interface Builder 更改 UIView 属性

ios - 将自定义 UIButton 样式应用于所有按钮

iphone - NSTimer 导致崩溃