Esercizio 1. Creiamo una semplice App Ricettario (TextView, Button e Stepper)

Il compito di questa lezione è mettere alla prova, in modo pratico, le nozioni apprese in tutto il modulo. Ti assegnerò degli esercizi che dovrai svolgere autonomamente. In questo modo testerai da solo le tue conoscenze pratiche e potrai decidere se è il caso di continuare ed andare al modulo successivo o rinfrescarti la memoria [...]

Torna a: Corso creare applicazioni per iOS con il linguaggio Swift > Le Basi dello Sviluppo Applicazioni
  • Giacomo Guglielmi

    Ciao Giuseppe,
    Nel secondo esercizio riscontro un problema in runtime quando alla creazione dell’oggetto nuovoUtente il simulatore mi butta fuori.
    Cosa strana lo stesso progetto in un altro mac funziona regolarmente.
    Tutti e due i computer hanno xcode6.4.
    Sai spiegarmi il diverso comportanento?
    GRAZIE

    • Ciao Giacomo,

      Che versione di Xcode stai utilizzando?
      Hai provato a creare un nuovo progetto da 0?

      Probabilmente è un bug della versione che utilizzi (ho compilato il progetto con Xcode 7 beta 5 e funzionava)

      Giuseppe Sapienza
      http://www.xCoding.it | Sviluppa, Crea e Codifica i tuoi sogni.

  • Mmmh stranissimo. Comunque i progetti del corso sono per Xcode 7, questo non ce l’hai?

    Giuseppe Sapienzawww.xCoding.it | Sviluppa, Crea e Codifica i tuoi sogni.

  • Giacomo Guglielmi

    Devo aspettare per problemi di aggiornamenti.
    Comunque per adesso ti ringrazio.
    Ciao!

    • Di niente Giacomo,

      Per qualsiasi problema contattami pure ;)

      Giuseppe Sapienzawww.xCoding.it | Sviluppa, Crea e Codifica i tuoi sogni.

  • Giacomo Guglielmi

    Risolto,
    Avevo attivi i Breakpoint nel Debug che mi bloccava il ciclo del app!

  • Mmmh! volevo fare il crudele hahah
    Attivo subito la possibilità di reset (sicuramente non l’avevo abilitata) :D

  • Ilaria

    Ciao ragazzi,
    una domanda: ma nell’ultimo esercizio i campi nei quali inserire l’alimento e la categoria, si intendono due text field non due label, giusto?

    • Ciao Ilaria esattamente due textfield

      Inviato da iPhone

  • Pellicano

    Ciao professò, mi sembra che i quiz della lezione siano gli stessi della lezione prima

    • Ciao Maurizio,

      Esatto sono un recap di tutte le lezioni precedenti.

      • Pellicano

        ah ok! come non detto, eseguo

  • Marco

    ho perso veramente la mano.. più di 4 anni che non scrivo codice.
    suggerirei ancora più esercizi, anche per familiarizzare con Xcode e quick help

    • Ciao Marco,

      Appena finisco il secondo modulo ed appena arrivi a terzo, quando ci saranno più carte in tavola, vi assegnerò più esercizi :D

  • Matteo

    Ciao Giuseppe,

    ho scaricato il file da dropbox del primo esercizio MOD1 Esercizio 1 ma aprendo l’xproj presenta degli alert rossi e cliccando su mainstoryboard non mi visualizza né l’interfaccia né l’assistant editor.

    • Ciao Matteo,
      Controllo subito e ti faccio sapere

      Inviato da iPhone

    • Matteo,
      Ho controllato e sembra funzionare tutto correttamente. Prova a scaricarlo da qui http://cl.ly/350T1e2Z050g è lo stesso progetto che c’è su dropbox. Fammi sapere

      • Matteo

        Ok questa versione funziona correttamente! Grazie

        • Di niente Matteo ( è la stessa di quella che c’è su dropbox).
          Ad ogni modo, se ci sono problemi chiedi pure ;)

  • Matteo

    Ho avuto più difficoltà a svolgere il primo (la func con bool per verificare l’esistenza del at o del dot mi è risultata un po’ contorta). Il secondo meglio, l’ho risolto ma senza impostare la class User. Il terzo ora ci provo….

    • Un consiglio che posso darti è quello di commentare tutte le righe del codice con la spiegazione di ciò che fa ogni singola istruzione. Così controlli se realmente conosci e sai quello che stai facendo. In questo modo prendi familiarità e sicurezza con il codice

      Ad ogni modo fammi sapere ;)

      Inviato da iPhone

  • nickbonny

    Ciao Peppe, io ho risolto il primo esercizio in modo un pochino diverso..vorrei provare a mandarti il progetto così mi dici se può andare bene! A me sembra che funzioni..l’unica cosa è che sono presenti dei triangolini gialli che mi consigliano di sostituire delle var con delle let. Il fatto è che se sostituisco poi mi da errore..

    • Ciao Nick,

      Fai l’upload del progetto su dropbox o su un’altra piattaforma e incollalo in un topic su forum, così rendiamo partecipi anche gli altri utenti ;)
      In alternativa, se non ti va, mandamelo in privato!

  • Michele

    Ciao Peppe, a parte un po’ di mal di testa per capire il funzionamento di un’ app ed i ruoli delle varie classi, fin qui tutto bene (certo lo dice anche il paracadutista a 100 m dal suolo).

    Domanda 1: venendo da altri linguaggi di programmazione (c, c++, visual basic) mi viene spontanea una domanda. Bellissima l’idea di disegnare l’interfaccia con drag&drop. Bellissima l’idea di linkare le componenti della UI al codice. Al tempo stesso mi sento un po’ vincolato… cioè.. esiste un modo per far nascere un componente della UI dinamicamente dal codice? Cioè posso instanziare dalla viewcontroller un componente della view senza passare dal bellissimo Storyboard?

    Domanda 2: nel mio simulatore vedo tutto enorme perché il macbook Air non ha un display retina? e quindi devo forzare lo zoom al 50%…

    Grazie sempre per il lavoro svolto.
    Michele

    • Ciao Michele,
      Scusa il ritardo ma il fine settimana sono spesso off.

      Per quanto riguarda le tue domande, come gli altri linguaggi che mi hai citato, esiste il corrispettivo metodo per creare le interfacce da codice.
      Lo storyboard, quando usi il drag e drop crea un file xml per la gestione del suo layout (cosa sconsigliata da modificare).
      Per svincolarsi dallo storyboard puoi istanziare tutti gli oggetti che hai trovato fin ora e che troverai in avanti direttamente dal codice.
      Anche i vincoli di auto layout possono essere creati da codice con le rispettive classi d’appartenenza. Nel corso, comunque, non tratteremo questo aspetto (ne parlerò sul blog).

      Puoi utilizzare la generazione dei componenti a runtime per eseguire delle animazioni o altri effetti particolari (nella lezione delle StackView c’è una lezione a riguardo).
      Per il resto, la stessa Apple sconsiglia di utilizzare il codice e gli ultimi aggiornamenti apportati allo storyboard spingono verso questo approccio.

      Per la domanda due, si devi forzare la visualizzazione al 50% se no il simulatore esce fuori dallo schermo.

      Grazie a te per la domanda,
      Alla prossima ;)

  • gervas

    ciao Pepe, come faccio ad incollare il ViewController per farti vedere i codici?..

    • Ciao Gervas,
      Quando scrivi qui il commento, in basso a sinistra c’è un simbolino rettangolare che ti permette di caricare uno screen

      • gervas

        ah, ma solo como screen, quindi se il codice e’ lungo devo allegare più di una “foto” o basta un solo screen per tutto un codice anche se questo va fuori dello screen?

        Ps..sto facendo le size class..devo dire che mi risulta complicado capire di come passare in modo veloce di un tipo ad altro. No riesco a fare come nel tuo video…infatti mi risulta un può troppo veloce :-/. Puoi fare qualcosa più in dettaglio?
        Grazie!!

        • Ciao Gervas,
          Metti pure un link di download del tuo progetto e indicami dove sta il problema. Lo controllo con piacere!
          Mentre per i video, se li scarichi da dropbox li puoi vedere a velocità ridotta utilizzando qualsiasi player!

          Fammi sapere ;)

  • marcodognini

    ciao Peppe,
    nel 1° esercizio ho utilizzato l’error handling per la gestione degli errori relativi al campo mail.
    Nonostante avessi gestito tutto correttamente mi dava errore “errors thrown from here are not handled because the enclosing catch is not exhaustive”.
    Cercando su stackoverflow ho trovato come soluzione quella di aggiungere un catch vuoto in fondo, però non ho capito il reale motivo, sapresti spiegarmelo?

    altra cosa…..come mai non ricevo nel notifiche via mail di risposta ai commenti nonostante ho tutto attivo nelle impostazioni?

    grazie

    enum errorMail: ErrorType { //creo un oggetto Errortype per gestire gli errori del campo mail

    case CampoVuoto

    case NomeUtenteMancante

    case DominioMancante

    case ChiocciolaMancante

    }

    @IBAction func checkMail(sender: AnyObject) { //IBAction che si attiva alla pressione del Button di check mail

    print(self.email.text) //stampo la mail nella Debug Area in basso per avere un controllo

    do {

    try controlloMail(self.email.text) //eseguo la funzione di controllo mail con gestione dell’errore

    self.showResult.text! = (“indirizzo corretto!”)

    self.showResult.textColor = UIColor (red: 1, green: 1, blue: 1, alpha: 1) //coloro il testo della Label di bianco

    }

    catch errorMail.CampoVuoto {

    self.showResult.text! = (“compila il campo”)

    self.showResult.textColor = UIColor (red: 252/255, green: 121/255, blue: 109/255, alpha: 1)

    }

    catch errorMail.ChiocciolaMancante {

    self.showResult.text! = (“@ non trovata, indirizzo errato”)

    self.showResult.textColor = UIColor (red: 252/255, green: 121/255, blue: 109/255, alpha: 1)

    }

    catch errorMail.DominioMancante {

    self.showResult.text! = (“manca il dominio, indirizzo non corretto”)

    self.showResult.textColor = UIColor (red: 252/255, green: 121/255, blue: 109/255, alpha: 1)

    }

    catch errorMail.NomeUtenteMancante {

    self.showResult.text! = (“l’indirizzo non può iniziare con una @”)

    self.showResult.textColor = UIColor (red: 252/255, green: 121/255, blue: 109/255, alpha: 1)

    }

    catch {

    }

    • Ciao Marco,

      Scusa, credo che le email non arrivino perché in questi giorni ho spostato il server e sto modificando alcune cose in vista di alcuni aggiornamenti importanti che sto facendo. Dai un’occhiata anche al tuo account disqus (ci accedi dal bottone a destra che trovi sopra i commenti vicino “Ordina Per”)

      Tornando a noi, nel tuo particolare stai provando a controllare tutti i probabili errori che hai circoscritto con l’Enum. Però, non è sempre detto che esistano solo questi particolari errori che solleveranno una eccezione. Ne potrebbero esistere di altri che non sono strettamente legati al codice che hai scritto.

      Da questo deriva il catch vuoto. Pensalo al case default dell’istruzione switch.

      Se dovessero esserci altri problemi, chiedi pure!
      Alla prossima e buona programmazione,
      Giuseppe Sapienza | xCoding.it

  • Brixio

    Ciao Peppe,
    ho eseguito il primo esercizio e fin qui tutto ok. C’è una cosa però che non mi è chiara riguardo la chiamata alla funzione che utilizzo per verificare che sia stata inserita la @ e il .

    Dentro l’IBAction dichiaro due let. Una con il carattere @ e l’altra con il .
    Utilizzo una serie di if che richiamano la stessa funzione la quale mi controlla tramite un guard se sono stati inseriti i caratteri obbligatori. La prima volta la richiamo passando come argomento la @ e la seconda volta passandogli il .

    let at: Character = “@”
    let dot: Character = “.”

    if(chkEmail(textField_AddEmail.text!, caratter: at)) {

    gli annido:

    if(chkEmail(textField_AddEmail.text!, caratter: dot)) {

    la funzione è questa:

    func chkEmail(email: String, caratter: Character) -> Bool {
    for caratt in email.characters {
    guard caratt != caratter else {
    return true
    }
    }
    return false
    }

    ripeto tutto funziona pero perché se quando chiamo la funzione chkEmail e gli passo gli argomenti in questo modo:
    (textField.AddEmail.text!, at)
    mi da errore? Missing argomento label ‘caratter:’ in call
    devo obbligatoriamente inserire caratter: Character ?!?

    perché devo per forza specificare la label?
    Se provo a fare la stessa cosa sul playground non mi da errore. Non mi obbliga ad inserire una label.

    Grazie infinite della disponibilità e complimenti davvero per il modo che hai di spiegare le cose! Sei super :-)

  • Marcello

    Ciao Peppe, ho appena completato il primo esercizio.. Ho una domanda: quando scrivo la mail nella textfield se premo invio da tastiera non mi chiama la funzione che ho creato per il tasto che controlla la mail.. Dovrei creare un’altra action che mi richiama la stessa funzione? Oppure c’è qualche altro metodo? Grazie a presto

    • Ciao Marcello,

      L’invio da tastiera (del dispositivo iOS) su un campo TextField viene controllato dalla Action Did End On Exit. Quindi se vuoi attivare un codice solo quando l’utente preme Invio dalla tastiera devi creare una Action di questo tipo per la TextField.

      In caso non dovessi riuscirci, spiegami meglio cosa vuoi ottenere e ti dico i passaggi da eseguire

      Buona programmazione,
      Giuseppe Sapienza

Start typing and press Enter to search

esercizio-fine-primo-modulo-corso-ios