Xcode:获取徽章值以将其添加到标签

时间:2012-03-14 09:11:56

标签: xcode string push-notification nsnumber badge

我有一个接收推送通知的应用。 我想在应用程序菜单中的按钮附近添加带有正确值的徽章(你还记得旧的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查询......有什么想法吗?

2 个答案:

答案 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]];

它有效!谢谢你的帮助