2016-06-17 12 views
13

Sto utilizzando swift 3.0 e sto cercando di aggiungere numeri di badge alla mia app. Credo che il modo corretto per farlo sia simile a quello che segue.Swift 3.0 Modifica della sintassi per UIUserNotificationSettings

application.registerUserNotificationSettings(UIUserNotificationSettings(forTypes: UIUserNotificationType.Sound | UIUserNotificationType.Alert | 
      UIUserNotificationType.Badge, categories: nil 
      )) 

application.applicationIconBadgeNumber = 5 

Tuttavia, viene visualizzato un errore per l'utilizzo di '|' nel blocco UIUserNotificationSettings e verrà visualizzato l'errore "Etichette argomento (per Tipi, categorie) non corrispondono a nessuno degli overload disponibili" per UIUserNotificationSettings se ho solo UIUserNotificationType.badge come primo argomento. 3.0 ha modificato la sintassi per questa istruzione?

+5

* tutti * sintassi cambiato con Swift 3, ma la tua è anche pre-Swift 2. Dai un'occhiata alla http://stackoverflow.com/a/30763344/1187415 e quindi avviare il "Convertire a corrente Swift Sintassi "convertitore in Xcode. O leggi la documentazione. –

+0

Non mi importa meno dei punti, ma dovresti cambiare la risposta corretta per questa domanda come è cambiata con iOS 10.0. È una domanda molto comune e la gente dovrebbe sapere qual è la risposta corretta per ora, – Pierce

risposta

33

È stato aggiornato sia in Swift 2 che in Swift 3. Questa riga dovrebbe risolvere il problema. Assicurarsi inoltre che tutte le altre righe con UIUserNotificationType abbiano modificato le loro variabili in lettere minuscole.

let settings = UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil) 
+0

Dovrebbe essere contrassegnata come risposta valida –

+3

Swift 3 + iOS 10 utilizza UNNotificationSettings https://developer.apple.com/reference/usernotifications/unnotificationsettings – markturnip

+3

' UIUserNotificationSettings' è stato deprecato per iOS 10.0. Ho postato una risposta di seguito su quale sia la sintassi corrente consigliata. – Pierce

14

Da quello che ho capito, UIUserNotificationSettings è stato deprecato per iOS 10.0. Si consiglia ora di utilizzare UNUserNotificationCenter.

Ecco che cosa ho fatto per assicurarsi che il mio codice è stato fino ad oggi:

1) Introduzione del quadro UserNotifications nel vostro AppDelegate

import UserNotifications

2) All'interno della funzione didFinishLaunchingWithOptions all'interno della AppDelegate, aggiungi il seguente:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 

    UNUserNotificationCenter.current().requestAuthorization(options:[.badge, .alert, .sound]) { (granted, error) in 

     if granted { 
      UIApplication.shared.registerForRemoteNotifications() 
     } 

    } 

    return true 
} 

Una volta avete le notifiche registrati e autorizzati, è possibile cambiare il numero di badge in qualsiasi punto:

UIApplication.shared.applicationIconBadgeNumber = value

Questo ha funzionato per me, ho appena provato con l'invio di una notifica a distanza al mio telefono, e ha funzionato bene. Spero che questo ti aiuti.

+2

sì, la risposta è effettiva per iOS 10.0 Grazie –

2

"rawValue" può utilizzare | operatore.

Questo codice funziona in swift3, tuttavia non è necessario.

let types = UIUserNotificationType(rawValue:UIUserNotificationType.alert.rawValue | UIUserNotificationType.sound.rawValue | UIUserNotificationType.badge.rawValue) 

application.registerUserNotificationSettings(UIUserNotificationSettings(types: types, categories: nil)) 
Problemi correlati