在AppDelegate中清除NSMutableDictionary中的几个推送通知

时间:2014-02-21 13:21:57

标签: 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'

请有人给我答案如何纠正。

1 个答案:

答案 0 :(得分:2)

这不是一个可变的字典

你应该使用下面的初始化来使字典变得可变。

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

另外作为样式的东西不要将字典称为数组

也个人不喜欢看到这个

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

如果您需要这种功能,请创建您自己的单例,不要使用这个王者的东西重载应用程序委托。应用程序委托是让系统与您的应用程序通信,您应该尽可能避免将应用程序逻辑放在此处。