2012-03-14 78 views
0

我有一个接收推送通知的应用程序。 我想在应用程序菜单中的按钮附近添加带有正确值的徽章(您还记得旧的Facebook应用程序吗?)。Xcode:获取徽章值将其添加到标签

我试图从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 
} 

通过调试我看到巴dgeValue不是一个真正的字符串,而是__NSCFNumber,如果我尝试在一个字符串中转换它,返回值是一个奇怪的数字。 我到处搜索的方式来获取通知的徽章价值,但我能想到的唯一选择是一个PHP查询...任何想法?

回答

0

你是什么意思的“Xcode让我保存在一个字符串badgeValue”?如果您尝试键入badgeValue作为NSNumber,您会遇到错误或编译器警告吗?文档和你自己的日志记录告诉你,关键“徽章”的价值是一个NSNumber。

NSNumber * badgeValue = [[userInfo valueForKey:@"aps"] valueForKey:@"badge"]; 
[label1 setIntValue:badgeNumber.intValue]; 

这样的事情不行吗?

0

是,就在昨天,我试着用

NSString *string = [NSString stringWithFormat:@"%d", [badgeValue intValue]]; 

和它的作品!感谢您的帮助