2014-07-20 13 views
6

Questa è una domanda successiva a How to check launchOptions in Swift? - Ho avviato la mia app senza interruzioni, ma non riesco a rilevare correttamente quando l'app si avvia da una notifica a una normale lanciare.Verifica di avvio da UILocalNotification in Swift

sto creando il mio UILocalNotification in questo modo:

// set up a frequently recurring notification here just for testing... 
var fast = UILocalNotification() 
fast.fireDate = NSDate(timeIntervalSinceNow: 15) 
fast.alertBody = "Alert Message" 
fast.timeZone = NSTimeZone.localTimeZone() 
fast.repeatInterval = NSCalendarUnit.CalendarUnitMinute 
fast.userInfo = ["Important":"Data"] 
UIApplication.sharedApplication().scheduleLocalNotification(fast) 

E questo è il mio codice per cercare di gestire quando l'applicazione viene avviata da un UILocalNotification.

func application(application: UIApplication!, didFinishLaunchingWithOptions launchOptions: NSDictionary!) -> Bool { 
    if var launch = launchOptions { 
     if var key = launch.objectForKey(UIApplicationLaunchOptionsLocalNotificationKey) { 
      // I never seem to reach this point... 
     } 
    } 
    return true 
} 

Se la mia applicazione è in background e mi toccare la finestra di avviso, l'azione voglio fuoco viene eseguita correttamente, quindi so che io almeno posso ottenere un percorso di lavoro. Il problema qui è il lancio dell'applicazione completamente da una notifica.

risposta

3

Se la tua app è in esecuzione in background, il metodo "application doneFinishLaunching" non verrà chiamato. È già stato lanciato.

In questo caso è necessario eseguire il proprio lavoro nel metodo "applicazione ha fatto recessoLocalNotifica".

func application(application: UIApplication!, didReceiveLocalNotification notification: UILocalNotification!) { 
     // do your jobs here 
} 
+0

Sì, quella parte sta funzionando bene. Tuttavia, sto parlando del caso in cui l'app si sta avviando, ovvero non è in esecuzione in background. – bitops

-1

LaunchOptions sarà nullo se si avvia direttamente l'applicazione. Il codice verrà eseguito se si avvia l'applicazione tramite le notifiche anziché avviare direttamente l'applicazione.

Se si avvia direttamente l'applicazione, sono necessari altri modi per risolvere questo problema. Come utilizzare l'ora del LocalNotification e l'ora corrente e decidere quale vista mostrare.