Notifications in Swift

iOS-8-logo-mockup-001

Ciao a tutti cari amici di iProg nel tutorial di oggi vorrei parlarvi della classe NSNotification, questa classe è veramente molto potente in quanto ci permette di inviare dei messaggi tra oggetti che “non si conoscono “. Un esempio potrebbe essere una stazione radio (mittente) che trasmette un messaggio, mentre gli ascoltatori possono scegliere di ascoltare e ricevere alcuni o tutti i messaggi trasmessi. Uno scenario più realistico potrebbe essere quello di avere un controllo sulla qualità del segnale del nostro smartphone e quando quest’ultima cambia inviare delle notifiche. Gli oggetti in ascolto potrebbero reagire di conseguenza in base alla qualità del segnale ad esempio quando il segnale è buono è possibile effettuare il download di una foto.  L’applicazione che creeremo oggi ci consentirà di ricevere una notifica ogni qualvolta il nostro dispositivo subirà un cambio di orientamento ovvero quando passerà da Portrait a Landscape e viceversa.

Creiamo un nuovo progetto di tipo Single View e scegliamo come linguaggio swift. Una volta fatto ciò tutto quello che dobbiamo fare è scrivere il seguente codice:

 

    override func viewDidLoad() {
        super.viewDidLoad()

        //Facciamo in modo che la nostra classe possa ricevere le notifiche
        NSNotificationCenter.defaultCenter().addObserver(self, selector: "metodo:", name:"Notifica", object: nil)
        //1)Il parametro addObserver  vuole come parametro l'oggetto che vuole sapere quando un avviene una certa notifica
        //2)selector vuole come parametro il metodo che deve richiamare quando accade una certa notifica
        //3) nome della notifica
    }

    //Metodo che viene usato per inviare la notifica
    func postNotification(orientation :NSString){
        let nomeNotifica = "Notifica"
        let chiave = "OrientamentoValue"
        var dizionario = NSDictionary(object: orientation, forKey: chiave )
        NSNotificationCenter.defaultCenter().postNotificationName(nomeNotifica, object: nil, userInfo: dizionario)
        //postNotificationName richiede 3 parametri:
        //1) il nome della notifica
        //2) l'oggetto in questo caso nil
        //3) e userInfo che è un dizionario

    }

  //metodo per la gestione dell'orientamento del dispositivo
    override func willAnimateRotationToInterfaceOrientation(toInterfaceOrientation: UIInterfaceOrientation, duration: NSTimeInterval) {
         if (interfaceOrientation == UIInterfaceOrientation.Portrait) {
            //Se l'orientamento del device è in Portrait verrà inviato Portrait
            //Viceversa verrà inviata la notifica con Landscape
            postNotification("Portrait")
        }
         else{
            postNotification("Landscape")
        }

    }

    //metodo che viene richiamato quando si verifica una notifica
    func metodo(notification: NSNotification){
        //creiamo il dizionario
        let userInfo:Dictionary<String,String!> = notification.userInfo as Dictionary<String,String!>
        //estraiamo il messaggio che ci interessa
        let messageString = userInfo["OrientamentoValue"]
        // mostriamo il messaggio tramite un alertView
      var alert = UIAlertController(title: "Orientamento Device", message: messageString, preferredStyle: UIAlertControllerStyle.Alert)
        alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil))
        self.presentViewController(alert, animated: true, completion: nil)

        //println(messageString!)
    }

 

Schermata 2014-11-30 alle 14.58.17

 

 

download_esempio-300x120

Related Posts

Come generare la documentazione per la nostra app in maniera semplice e veloce con Jazzy

Slack: La piattaforma per la comunicazione tra gruppi di lavoro

iOS: Fastlane … Il primo appriccio

Rating in iOS

  • Leonard

    ciao Diego, ottima guida complimenti. Non funziona però il link dell’esempio allegato!

    • Risulta funzionante. Riprova.

Si prega di attivare i Javascript! / Please turn on Javascript!

Javaskripta ko calu karem! / Bitte schalten Sie Javascript!

S'il vous plaît activer Javascript! / Por favor, active Javascript!

Qing dakai JavaScript! / Qing dakai JavaScript!

Пожалуйста включите JavaScript! / Silakan aktifkan Javascript!