Puis-je recevoir la notification de démarrage iOS après le démarrage de l'application?

Je cherche un moyen de récupérer la UIApplicationLaunchOptionsLocalNotificationKey sur iOS qui n'implique pas l'utilisation du délégué d'application, c'est-à-dire que je ne veux pas avoir à implémenter ce qui suit:

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

J'essaie de créer une bibliothèque d'aide qui a besoin d'informations sur la notification de démarrage. Y a-t-il une manière de faire ça? Puis-je récupérer les options de lancement via une autre méthode à un stade ultérieur du process de candidature?

Vous pouvez vous append en tant qu'observateur de la notification UIApplicationDidFinishLaunchingNotification qui sera posée par l'application et contient les informations que vous searchz.


Comme le suggère @Stavash, il existe des limites. Pour le premier lancement, vous ne pourrez pas sélectionner cette notification car l'instance de votre bibliothèque ne sera pas créée (votre class devra être dans la racine XIB). Mais, cette notification sera également envoyée lorsque l'application est rouverte pour les notifications locales / distantes.

Utilisez une catégorie AppDelegate et dans la méthode + load de votre catégorie ajoutez un observateur pour UIApplicationDidFinishLaunchingNotification. Pour la class d'observateur, vous ne pouvez pas utiliser "self", mais vous devrez utiliser un object singleton. Voici les étapes exactes pour y arriver.

  1. Ajoutez une catégorie pour votre AppDelegate. Par exemple: @interface AppDelegate (notification).
  2. Implémentez la méthode + load dans votre catégorie. Lorsque l'application est lancée, elle commencera à appeler la méthode + load de toutes les classs chargées. Cela inclut également vos catégories.
  3. Créez une class Singleton avec une méthode qui recevra le NSNotification. Donc implémentez une signature comme celle-ci – (void) appDidLaunch: (NSNotification *) notification; dans votre class singleton.
  4. Dans la méthode + load, ajoutez un observateur pour la notification "UIApplicationDidFinishLaunchingNotification".
  5. Faites l'object singleton en tant qu'observateur pour cette notification.
  6. Ajoutez vos points d'arrêt dans vos methods + load et appDidLaunch pour voir la séquence des methods appelées. Vous obtiendrez aussi les launchOptions dans votre méthode de callback d'observateur.

L'autre façon de le faire serait de Swizzle la méthode init de AppDelegate avec une méthode swizzle_init. De cette façon, vous pouvez éviter l'object Singleton et définir votre méthode d'observateur "appDidLaunch" dans la catégorie de votre AppDelegate. Dans ce cas, vous pouvez définir «self» comme observateur de votre notification.