我有一个接收推送通知的应用。 我想在应用程序菜单中的按钮附近添加带有正确值的徽章(你还记得旧的Facebook应用吗?)。
我正在尝试从AppDelegate中的通知中获取徽章值,将其保存在NSUserDefault中以在其他视图控制器中使用它。
NSString * badgeValue = [[userInfo valueForKey:@"aps"] valueForKey:@"badge"];
NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:badgeValue forKey:@"badge"];
[defaults synchronize];
问题是,如果我尝试将值放在标签中,应用程序崩溃
'NSInvalidArgumentException',原因:' - [__ NSCFNumber isEqualToString:]:无法识别的选择器发送到实例
Xcode让我在一个字符串中保存badgeValue但是当我把字符串放在标签中时它说的不是一个合适的字符串
if ([badgeValue isKindOfClass:[NSString class]]) {
NSLog(@"it is string !!!!!!!!!!!!!!!");
// treat it as a string object
} else {
NSLog(@"it is not a string !!!!!!!!!!!!!!!");
// treat it as a number object
}
通过调试我看到badgeValue不是真正的字符串而是__NSCFNumber,如果我尝试将其转换为字符串,则返回值是一个很长的奇怪数字。 我到处寻找获取通知徽章价值的方法,但我能想到的唯一选择是php查询......有什么想法吗?
答案 0 :(得分:0)
你是什么意思“Xcode让我在一个字符串中保存badgeValue”?如果您尝试键入badgeValue作为NSNumber,是否会收到错误或编译器警告?文档和您自己的日志记录告诉您键“徽章”的值是NSNumber。
NSNumber * badgeValue = [[userInfo valueForKey:@"aps"] valueForKey:@"badge"];
[label1 setIntValue:badgeNumber.intValue];
这样的事情不起作用吗?
答案 1 :(得分:0)
是的,就在昨天我尝试了
NSString *string = [NSString stringWithFormat:@"%d", [badgeValue intValue]];
它有效!谢谢你的帮助