The data couldn’t be read because it isn’t in the correct format: ecco come validare un file .plist

Xcode permette di modificare un plist anche in vista “Source Code”, molto comoda per modifiche massicce. Però quando si commette un errore e la sintassi non è più quella corretta, Xcode avvisa solo per il formato non è valido, senza alcuna indicazione sulla riga di codice errata: “The data couldn’t be read because it isn’t in the correct format”.

Inoltre non permette di tornare alla vista Property List finché non si è trovato l’errore.

Per poter validare un plist e trovare gli errori allora basta aprire il Terminale, spostarsi nella cartella del file plist e digitare

1
plutil file-name.plist
plutil file-name.plist

Questo restituirà l’elenco degli errori trovati (es: Encountered misformatted real on line 539) oppure restituirà OK.

Preview dell’Autolayout

Fondamentale per l’uso e l’apprendimento dell’Autolayout è la Preview. Ecco la procedura per attivarla:

  1. Apri uno Storyboard.
  2. Apri l’Assistant Editor
  3. Nell’Assistant Editor, clicca sul quarto pulsante (quello che solitamente dice Manual/Automatic/ecc.).
  4. Scegli “Preview”, in fondo all’elenco.
  5. Ora in basso a destra si può scegliere i dispositivi su cui mostrare la Preview.

Animare il cambiamento di una vista

Questa tecnica è utilizzabile sia per creare dissolvenze in uno slideshow di UIImage che per animare la variazione di UI in una UIView.

1
2
3
4
5
6
7
8
/* qui il codice che modifica la vista */
 
CATransition *transition = [CATransition animation];
transition.duration = 1.0f;
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
transition.type = kCATransitionFade;
 
[aView.layer addAnimation:transition forKey:nil];
/* qui il codice che modifica la vista */

CATransition *transition = [CATransition animation];
transition.duration = 1.0f;
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
transition.type = kCATransitionFade;

[aView.layer addAnimation:transition forKey:nil];

Si può aggiungere un .subtype, ad esempio se si vuole far scorrere la vista e decidere la direzione:

1
2
3
4
5
CATransition *transition = [CATransition animation];
transition.duration = .2f;
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
transition.type = kCATransitionMoveIn;
transition.subtype = kCATransitionFromLeft;
CATransition *transition = [CATransition animation];
transition.duration = .2f;
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
transition.type = kCATransitionMoveIn;
transition.subtype = kCATransitionFromLeft;

(fonte)