這是預期behaviour.See從蘋果文檔下面的代碼片斷:
作爲呈現通知的結果,用戶敲擊警報或抽頭(或點擊)的應用程序圖標的動作按鈕。 如果點擊操作按鈕(在運行iOS的設備上),系統將啓動應用程序,應用程序會調用其代理的應用程序:didFinishLaunchingWithOptions:方法(如果已實施);它傳入通知有效內容(用於遠程通知)或本地通知對象(用於本地通知)。 如果在運行iOS的設備上輕擊應用程序圖標,應用程序將調用相同的方法,但不會提供有關通知的信息。如果在運行OS X的計算機上單擊應用程序圖標,則應用程序會調用代理的applicationDidFinishLaunching:方法,在該方法中代理可以獲取遠程通知有效內容。
作爲一種變通方法,我可以提出一個小小的支票存入didFinishLaunchingWithOptions這樣的:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Get user info dict
NSDictionary* userInfo = [launchOptions valueForKey:@"UIApplicationLaunchOptionsRemoteNotificationKey"];
if([UIApplication sharedApplication].applicationIconBadgeNumber >0 && userInfo == nil){
//Do like you did in didRecieveRemoteNotification method
}
return YES;
}
實際上,你要檢查'用戶信息! = nil'。我還建議使用'UIApplicationLaunchOptionsRemoteNotificationKey'常數而不是容易出錯的靜態字符串。 – keeshux 2014-08-30 09:48:02
我同意恆定,但不同意userInfo check.In問題是說,他點擊了圖標,當點擊圖標userInfo是零時。如果點擊了推送通知的提醒,那麼userInfo不是零。 – Foriger 2014-08-30 10:05:26
不是。他說'didReceiveRemoteNotification'沒有被調用,這就是爲什麼你應該在'didFinishLaunchingWithOptions'中搜索通知的原因,正如你指出的那樣。無論如何你將如何處理零通知? – keeshux 2014-08-30 10:56:20