2013-08-05 71 views
3

我正在尋找一種方法來檢索iOS上UIApplicationLaunchOptionsLocalNotificationKey不使用應用程序委託涉及,即我不想必須實現以下幾點:應用程序啓動後可以獲取iOS啓動通知嗎?

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    UILocalNotification *localNotification = [launchOptions objectForKey: UIApplicationLaunchOptionsLocalNotificationKey]; 
    if (localNotification != nil) 
    { 
     // Process notification 
    } 
} 

我想創建一個需要啓動通知信息的幫助程序庫。有沒有這樣做?我可以在應用程序的後期通過另一種方法檢索啓動選項嗎?

回答

2

您可以將自己添加爲UIApplicationDidFinishLaunchingNotification通知的觀察者,該通知將由應用程序提出幷包含您正在查找的信息。


正如@Stavash所說,存在限制。對於第一次啓動,您將無法選擇此通知,因爲您的庫實例不會被創建(您的類需要位於根XIB中)。但是,當應用程序重新打開以進行本地/遠程通知時,也會發送此通知。

+0

但是在這個階段,除AppDelegate以外的任何類是否會被初始化並且能夠觀察和處理這個通知? – Stavash

+1

完美!我已經結束了使用加載消息和觀察者的組合..感謝您的提示... +(無效)負載 { [[NSNotificationCenter defaultCenter]的addObserver:自 選擇器:@selector(myFunction的:) 名:@ 「UIApplicationDidFinishLaunchingNotification」 對象:無 ]; } – Michael

-1

使用AppDelegate類別並在類別的+ load方法內爲UIApplicationDidFinishLaunchingNotification添加觀察者。對於觀察者類你不能使用「自我」,但你將不得不使用單身對象。這裏有確切的步驟來完成它。

  1. 爲您的AppDelegate添加一個類別。例如:@interface AppDelegate (通知)。
  2. 在您的類別中實現+ load方法。當 該應用程序啓動時,它將開始調用所有加載的 類的加載方法。這也包括您的類別。
  3. 創建 一個Singleton類與一個方法,將收到 NSNotification。所以實現這樣的簽名 - (void)appDidLaunch:(NSNotification *)notification;在你的單身人士 類。
  4. 在+ load方法中,爲通知 「UIApplicationDidFinishLaunchingNotification」添加一個觀察者。
  5. 使單身人士 作爲您的觀察者通知此通知。
  6. 在您的+ load和appDidLaunch方法中添加斷點 以查看正在調用的方法的順序 。您將在 觀察者回調方法中獲得launchOptions。

另一種方法是使用swizzle_init方法調用AppDelegate的init方法。這樣你就可以避免Singleton對象,並在AppDelegate的類別中定義你的「appDidLaunch」觀察者方法。在這種情況下,您可以將「自我」設置爲通知的觀察者。

+0

Downvoter,請爲downvote添加評論。如果解決方案不適合您,請註明。沒有任何線索只是低調,並不能幫助我或社區。 –

相關問題