我试图在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'
请有人给我答案如何纠正。
答案 0 :(得分:2)
这不是一个可变的字典
你应该使用下面的初始化来使字典变得可变。
_pusharray = [NSMutableDictionary dictionaryWithDictionary:[[userInfo valueForKey:@"aps"] valueForKey:@"badges"]];
另外作为样式的东西不要将字典称为数组
也个人不喜欢看到这个
[(AppDelegate *)[[UIApplication sharedApplication] delegate] pushArray];
如果您需要这种功能,请创建您自己的单例,不要使用这个王者的东西重载应用程序委托。应用程序委托是让系统与您的应用程序通信,您应该尽可能避免将应用程序逻辑放在此处。