应用程序启动后,我可以获得iOS启动通知吗?

我正在寻找一种方法来检索iOS上的UIApplicationLaunchOptionsLocalNotificationKey不涉及使用应用程序委托,即我不想实现以下:

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

我正在尝试创build一个需要启动通知信息的帮助程序库。 有没有这样做? 我可以在应用程序的后期通过另一种方法检索启动选项吗?

您可以将自己添加为UIApplicationDidFinishLaunchingNotification通知的观察者,该通知将由应用程序提出并包含您正在查找的信息。


正如@Stavash所说,有一些限制。 对于第一次启动,您将无法select此通知,因为您的库的实例将不会被创build(您的类将需要在根XIB)。 但是,当应用程序重新打开本地/远程通知时,也会发送此通知。

使用AppDelegate类别,并在类别的+ load方法内为UIApplicationDidFinishLaunchingNotification添加一个观察者。 对于观察者类你不能使用“自我”,但你将不得不使用一个单身的对象。 这里有确切的步骤来完成它。

  1. 为您的AppDelegate添加一个类别。 例如:@interface AppDelegate(通知)。
  2. 在您的类别中实现+加载方法。 当应用程序启动时,它将开始调用所有加载的类的加载方法。 这也包括你的类别。
  3. 使用将接收NSNotification的方法创build一个Singleton类。 所以实现这样的签名 – (void)appDidLaunch:(NSNotification *)notification; 在你的单身class。
  4. 在+ load方法中,为通知“UIApplicationDidFinishLaunchingNotification”添加一个观察者。
  5. 让单身对象作为你的观察者来发送这个通知。
  6. 在你的+ load和appDidLaunch方法中添加断点来查看被调用的方法序列。 您将在观察者callback方法中获得launchOptions。

另一种方法是使用swizzle_init方法调用AppDelegate的init方法。 这样,你可以避免Singleton对象,并在你的AppDelegate的类别中定义你的“appDidLaunch”观察者方法。 在这种情况下,您可以将“自我”设置为通知的观察者。