Xcode: получение значения значка для добавления его в ярлык - PullRequest
0 голосов
/ 14 марта 2012

У меня есть приложение, которое получает push-уведомления.Я хотел бы добавить значок с правильным значением рядом с кнопкой в ​​меню приложения (вы помните старое приложение 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 голосов
/ 26 марта 2012

Да, только вчера я попробовал с

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

И это работает!Спасибо за помощь

0 голосов
/ 24 марта 2012

Что вы подразумеваете под "Xcode заставляет меня сохранять badgeValue в строке"?Получаете ли вы сообщение об ошибке или предупреждение компилятора, если вы пытаетесь ввести badgeValue как NSNumber?Документация и ваше собственное ведение журнала сообщают вам, что значением ключа "badge" является NSNumber.

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

Не работает ли что-то подобное?

...