2014-10-07 15 views
6

Sto cercando di seguire la guida Analizza per gestire le notifiche mando in formato JSON, ma sto avendo un problema, qui è il mio codice:Xcode, Parse - Gestione notifiche remote

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary!) -> Bool { 
     // Override point for customization after application launch. 
     Parse.setApplicationId("MyAppId", clientKey: "MyAppClientKey") 

     var notificationType: UIUserNotificationType = UIUserNotificationType.Alert | UIUserNotificationType.Badge | UIUserNotificationType.Sound 

     var settings: UIUserNotificationSettings = UIUserNotificationSettings(forTypes: notificationType, categories: nil) 
     UIApplication.sharedApplication().registerUserNotificationSettings(settings) 
     UIApplication.sharedApplication().registerForRemoteNotifications() 

if let launchOptions = launchOptions { 
    var notificationPayload: NSDictionary = launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey] as NSDictionary! 
    println(launchOptions) 

    var url = notificationPayload["url"] as String 

    var feed: FeedTableViewController = FeedTableViewController() 
    feed.messages.insert(url, atIndex: 0) 
    feed.sections.insert("section", atIndex: 0) 
    } 


     return true 
    } 

la l'app non si blocca subito, ma le modifiche apportate non avvengono. codice JSON:

{ 
    "aps": { 
     "badge": 10, 
     "alert": "Test", 
     "sound": "cat.caf" 
    }, 
    "url": "http://www.google.com" 
} 

risposta

8

sto cercando di indovinare il problema è qui:

launchOptions(UIApplicationLaunchOptionsRemoteNotificationKey) as NSDictionary 

Non sono sicuro di quello che ti aspetti, ma per quanto ne so, non c'è nessun metodo del genere su un dizionario Probabilmente stai cercando la sintassi del pedice. Qualcosa di simile a questo:

launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey] as NSDictionary 

Per ottenere un dizionario nidificato all'interno del dizionario launchOptions sotto la chiave: UIApplicationLaunchOptionsRemoteNotificationKey.

Detto questo, launchOptions potrebbe essere nullo, è necessario aggiungere tale controllo nel codice e inoltre, provare a registrare launchOptions e pubblicare i risultati qui.

È possibile verificare se launchOptions sono pari a zero in questo modo:

if let launchOpts = launchOptions { 
    var notificationPayload: NSDictionary = launchOpts.objectForKey(UIApplicationLaunchOptionsRemoteNotificationKey) as NSDictionary 
} 
+0

vi preghiamo di controllare il mio post aggiornato, e cosa fare se launchoptions == nil? – Abdou023

+0

aggiornamento su come verificare la presenza di zero, non sono sicuro cosa dovresti fare se sono nulli. Suppongo che se fossero nulli, l'applicazione non è stata aperta via una notifica e dovresti solo continuare. – Logan

+0

Questo ha funzionato, ma ora non sono in grado di fare in modo che la notifica influenzi la mia app. per favore controlla la mia modifica – Abdou023

3

NSDictionary di objectForKey restituisce un optional:

func objectForKey(_ aKey: AnyObject) -> AnyObject?

quindi se si forza scartarlo con il! corri il rischio se l'Opzionale contiene zero. Dovresti forzare lo unwrap solo quando sei sicuro al 100% che l'Opzionale contiene un valore ma in questo caso UIApplicationLaunchOptionsRemoteNotificationKey viene impostato solo quando l'applicazione viene avviata quando l'utente tocca il messaggio di notifica remoto nel centro notifiche.

È necessario verificare la opzionale e abbattuto a NSDictionary utilizzando come ?:


if let myDict = launchOptions[UIApplicationLaunchOptionsRemoteNotifcationKey] as? NSDictionary { 
// there is a notification 
} else { 
// no notification 
} 

(il "come NSDictionary?" Non è strettamente necessario, come si può downcast in seguito, se lo fate non bassi Swift vi avvertirà che l'oggetto myDict sarà dedotto come ANYOBJECT.

+0

fatto che, ancora ottenere lo stesso errore. – Abdou023

2
if let remoteNotification = launchOptions?[UIApplicationLaunchOptionsRemoteNotificationKey] as? NSDictionary { 

} 
Problemi correlati