Xcode: получение значения значка, чтобы добавить его к метке

У меня есть приложение, которое получает 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-запрос... Есть идеи?


person Miwi    schedule 14.03.2012    source источник


Ответы (2)


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

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

Что-то вроде этого не работает?

person rdelmar    schedule 23.03.2012

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

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

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

person Miwi    schedule 26.03.2012