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:
[code lang=”swift”]
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!)
}[/code]