2012-03-14 33 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]]; 

和它的作品!感謝您的幫助