Convalida dei dati con i dati principali vincoli comuni

Indipendentemente dal framework di persistenza utilizzato da un'applicazione, lo sviluppatore decide cosa viene archiviato nell'archivio permanente dell'applicazione. Ciò significa anche che lo sviluppatore ha il compito di convalidare i dati prima che vengano inseriti nell'archivio permanente.

Se la tua applicazione utilizza i dati di base per dati persistenti, allora sei fortunato. Il framework ha un numero di API per la convalida degli oggetti prima che siano permanenti sul disco. In questo tutorial, ti mostrerò quali opzioni Core Data offre agli sviluppatori per la validazione degli oggetti.

1. Impostazione del progetto

Il modo migliore per imparare è farlo. Apri Xcode e crea un nuovo progetto basato sul Applicazione vista singola modello.

Assegna un nome al progetto Validazione e impostare linguaggio a veloce. Dai un'occhiata Utilizza i dati principali in basso e clicca Il prossimo.

2. Compila il modello dei dati

Aperto Validation.xcdatamodeld, crea una nuova entità e chiamala User. Aggiungi i seguenti attributi all'entità Utente:

  • primo di tipo Stringa
  • scorso di tipo Stringa
  • e-mail di tipo Stringa
  • età di tipo Numero intero 16

Crea un'altra entità, chiamala Nota, e aggiungere i seguenti attributi all'entità:

  • titolo di tipo Stringa
  • contenuto di tipo Stringa
  • createdAt di tipo Data

Un utente può avere molte note e una nota può appartenere a un solo utente. Ciò significa che dobbiamo aggiungere un A molti relazione con Utente entità con il Nota entità come destinazione. Abbiamo anche bisogno di aggiungere un A uno relazione con Nota entità con il Utente entità come destinazione e gli appunti come la relazione inversa. Questo è ciò che appare nell'editor del modello dati di Xcode.

3. Vincolare gli attributi

I vincoli comuni possono essere definiti nel modello di dati. Lascia che ti mostri come funziona. Aperto Validation.xcdatamodeld e selezionare il Utente entità. Seleziona il e-mail attributo e apri il Data Model Inspector sulla destra.

Nel Validazione sezione, è possibile impostare la lunghezza minima e massima dell'attributo. Puoi anche inserire un'espressione regolare il valore dell'attributo deve corrispondere per essere valido. Il Data Model Inspector aggiunge anche la possibilità di impostare un valore predefinito, che è conveniente per gli attributi richiesti.

Questo ci porta al vincolo più ovvio per gli attributi, la loro opzionalità. Deselezionando il Opzionale la casella di controllo in alto indica a Core Data che l'attributo deve avere un valore perché sia ​​valido.

Se un oggetto non supera la convalida, Core Data genera un errore se viene eseguita un'operazione di salvataggio. Va da sé che Core Data non consente di inviare oggetti non validi all'archivio permanente dell'applicazione.

Se si seleziona il età attributo del Utente entità, noterai che il Validazione la sezione sembra leggermente diversa. Perché il età l'attributo è di tipo Numero intero 16, puoi impostare un valore minimo e massimo per l'attributo. Puoi anche definire un valore predefinito.

Seleziona il createdAt attributo del Nota entità e aprire il Data Model Inspector. Si noti che è possibile specificare una data minima e una data massime nonché una data predefinita.

Lo svantaggio più importante dei vincoli definiti nel modello di dati è la mancanza di dinamismo. Ad esempio, se si desidera vincolare un attributo di tipo Data a valori basati sulla data corrente, quindi è necessario implementare la convalida personalizzata nel codice. Diamo un'occhiata a come funziona dopo.

4. Vincolare le relazioni

Le relazioni non sono molto diverse dagli attributi. Anche loro possono essere costretti. Una relazione può essere facoltativa o richiesta. Il conteggio di a A molti la relazione può essere limitata a un valore minimo e massimo. Seleziona il gli appunti attributo del Utente entità e aprire il Data Model Inspector. Il conteggio del gli appunti la relazione può avere un valore minimo e un valore massimo.

Avere la capacità di aggiungere vincoli a un modello di dati è un concetto potente ed è bello sapere che questo è incorporato nel framework dei dati principali.

5. Convalida di oggetti

Seleziona il Utente entità e contrassegnare ogni attributo come richiesto deselezionando il Opzionale casella di controllo in Data Model Inspector. Seleziona il età attributo e imposta il valore minimo su 0 e il valore massimo a 120. Imposta il valore predefinito dell'attributo su 21.

Aperto AppDelegate.swift e aggiornamento applicazione (_: didFinishLaunchingWithOptions :) come mostrato di seguito. Creiamo un'istanza di Utente entità e popolare i suoi attributi. Si noti che abbiamo impostato il età attributo a un valore che supera il valore massimo specificato nel modello di dati. Possiamo chiedere all'oggetto gestito se è valido per l'inserimento nello store persistente invocando validateForInsert (). Poiché questo metodo viene lanciato, lo avvolgiamo in a fare catture dichiarazione.

func application (application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool if let = NSEntityDescription.entityForName ("User", inManagedObjectContext: self.managedObjectContext) // Crea oggetto gestito consenti user = NSManagedObject ( entity: entity, insertIntoManagedObjectContext: self.managedObjectContext) // Popola oggetto gestito user.setValue (140, forKey: "age") user.setValue ("Bart", forKey: "first") user.setValue ("Jacobs", forKey : "last") user.setValue ("[email protected]", forKey: "email") do try user.validateForInsert () catch let validationError = errore come stampa NSError (validationError) restituisce true

Se si esegue l'applicazione nel simulatore o su un dispositivo fisico, si dovrebbe vedere il seguente errore nella console.

Errore Domain = NSCocoaErrorDomain Code = 1610 "Impossibile completare l'operazione. (Errore Cocoa 1610.)" UserInfo = NSValidationErrorObject = (entità: utente; id: 0x7fef63613eb0  ; dati: età = 140; email = "[email protected]"; prima = Bart; last = Jacobs; note = (); ), NSValidationErrorValue = 140, NSValidationErrorKey = age, NSLocalizedDescription = L'operazione non può essere completata. (Errore di cacao 1610.)

L'errore è abbastanza chiaro su cosa c'è di sbagliato nell'oggetto gestito. Anche se la descrizione localizzata è un po 'vaga, l'errore indica il valore di età l'attributo non soddisfa i vincoli che abbiamo definito nel modello di dati.

È possibile che siano stati lanciati più errori di convalida durante la convalida. Lascia che ti mostri come si presenta. Per evitare problemi di migrazione, elimina l'applicazione dal simulatore. Rivisitare il modello dati e selezionare il scorso attributo del Utente entità. Apri il Data Model Inspector a destra e deseleziona Opzionale per rendere l'attributo richiesto.

Aperto AppDelegate.swift e rimuovere la riga in cui impostiamo il cognome del Utente disco.

user.setValue ("Jacobs", forKey: "last")

Esegui nuovamente l'applicazione e ispeziona l'output nella console.

Error Domain = NSCocoaErrorDomain Code = 1560 "(null)" UserInfo = NSDetailedErrors = ("Dominio errore = NSCocoaErrorDomain Code = 1610 \" L'operazione non può essere completata. (Errore Cocoa 1610.) \ "UserInfo = NSValidationErrorObject = (entità: utente; id: 0x7feab84196f0  ; dati: \ n età = 140; \ n email = \ "[email protected] \"; \ n first = Bart; \ n last = nil; \ n notes = (\ n); \ n), NSValidationErrorValue = 140, NSValidationErrorKey = age, NSLocalizedDescription = L'operazione couldn \ U2019t non è stata completata. (Errore Cocoa 1610.) "," Dominio errore = NSCocoaErrorDomain Code = 1570 \ "L'operazione non può essere completata. (Errore di cacao 1570.) \" UserInfo = NSValidationErrorKey = last, NSLocalizedDescription = L'operazione couldn \ U2019t be completato. (Errore Cocoa 1570.), NSValidationErrorObject = (entità: utente; id: 0x7feab84196f0  ; dati: \ n età = 140; \ n email = \ "[email protected] \"; \ n first = Bart; \ n last = nil; \ n notes = (\ n); \ n) " )

Il userInfo Il dizionario dell'oggetto error contiene una serie di errori che ci informano su cosa è andato storto durante la validazione. Comprendere che gli stessi errori vengono generati se si tenta di salvare un oggetto gestito che non supera la convalida.

Conclusione

La convalida dei dati è un aspetto chiave della persistenza dei dati. È necessario assicurarsi che i dati inseriti nell'archivio permanente siano validi. In altre parole, i dati inseriti devono essere conformi ai requisiti definiti nel modello dati e nel codice dell'applicazione.

La prossima settimana ti mostrerò come è possibile creare regole di convalida più complesse nel codice. Anche se questo approccio richiede un po 'più di lavoro, le regole di convalida nel codice sono più flessibili e potenti.