2011-02-11 35 views
17

我在UILocalNotification上遇到了一些令人非常惱火的問題。UILocalNotification根本不起作用

在完成我幾乎完成的應用程序時,我注意到無論我嘗試了什麼,都無法使本地通知正常工作。

因此,我決定回到基礎知識,而不是浪費時間,看看能否讓他們工作。

我創建了一個新的XCode基於視圖的應用,換成-viewDidLoad與此:

- (void)viewDidLoad 
{ 
    UILocalNotification * theNotification = [[UILocalNotification alloc] init]; 
    theNotification.alertBody = @"Alert text"; 
    theNotification.alertAction = @"Ok"; 
    theNotification.fireDate = [NSDate dateWithTimeIntervalSinceNow:10]; 

    [[UIApplication sharedApplication] scheduleLocalNotification:theNotification]; 
} 

不過,這也沒有做任何事情。
我希望在啓動應用程序10秒後看到通知,但沒有任何顯示。
另外,我在iPhone和模擬器上測試了這個。

我在這裏錯過了一些非常重要的東西嗎? (我已經通過了蘋果的文檔搜索,但沒有找到任何東西,爲什麼發生這種情況

感謝

回答

43

UILocalNotification s的只有自動顯示該應用是否運行(或運行在後臺)。如果應用程序正在運行並且本地通知觸發,UIApplicationDelegate- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification方法會被調用,並且系統不會顯示任何內容(也不會播放聲音)。如果要顯示通知,請使用委託方法自己創建一個UIAlertView

+1

完美。非常感謝。 –

+0

我認爲沒有辦法改變這種行爲?通知中心是向我的用戶顯示應用程序運行時發生的異步通信事件的信息的好方法。 – David

+0

只需注意另一個需要注意的問題...如果設置時區參數,它會在警報按預期發生時發生作用...但是,如果將其明確設置爲UTC以避免時區,則可能無法執行您的操作可能會期望,因爲它仍然修改從UTC傳遞到UTC但是不同的方式。我發現在設置UTC時區參數時從未觸發警報,因此將其設置回零並確保觸發的UTC時間正確可解決問題。 – sradforth

15

從愚蠢我個人的冒險只是一個評論...

我有同樣的問題,但我的問題是,我忘了值分配給alertBody。如果您未設置alertBody,則通知將不會顯示。

+0

我一直在狩獵這個「錯誤」很長一段時間!謝謝!我希望至少有一個警告,因爲安排一個空的不可顯示的通知肯定是一個錯誤。 – Gerard

+1

恢復的幸福:) – Ramesh

+0

OMG,@conarch,你救了我的一天:)我也是這樣的人:)謝謝指出。 –

13
  1. fireDate必須是未來的時間。
  2. 應用必須在背景中運行,或者已關閉。
  3. 一兩件事,不要忘記,以顯示查詢是否允許推送,下面的代碼添加到AppDelegate中:

    -(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
        if ([UIDevice currentDevice].systemVersion.floatValue >= 8.0) { 
         UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge | UIUserNotificationTypeAlert | UIUserNotificationTypeSound categories:nil]; 
         [application registerUserNotificationSettings:settings]; 
        } 
    } 
    
+0

請格式化你的答案中的代碼 – Anton

+2

沒有在[Apple文檔](https://developer.apple.com/library/ios/documentation/iPhone/Reference/UILocalNotification_Class/index.html #// apple_ref/doc/uid/TP40009565-CH1-SW13),我讀過我首先需要爲僅具有本地通知的應用程序註冊「UserNotificationSettings」。這聽起來很簡單,幫助了我。 –