{"id":4477,"date":"2010-09-30T12:13:27","date_gmt":"2010-09-30T10:13:27","guid":{"rendered":"http:\/\/www.devapp.it\/wordpress\/?p=4477"},"modified":"2010-10-04T18:25:30","modified_gmt":"2010-10-04T16:25:30","slug":"t073-uiprogressview-e-nstimer-come-creare-una-semplice-barra-di-caricamento","status":"publish","type":"post","link":"https:\/\/www.devapp.it\/wordpress\/t073-uiprogressview-e-nstimer-come-creare-una-semplice-barra-di-caricamento\/","title":{"rendered":"T#073 &#8211; UIProgressView e NSTimer: come creare una semplice barra di caricamento"},"content":{"rendered":"<p><a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t073-uiprogressview-nstimer-barra-caricamento-iphone-ipad-sdk-00.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-full wp-image-4480\" title=\"t073-uiprogressview-nstimer-barra-caricamento-iphone-ipad-sdk-00\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t073-uiprogressview-nstimer-barra-caricamento-iphone-ipad-sdk-00.jpg\" alt=\"t073 uiprogressview nstimer barra caricamento iphone ipad sdk 00\" width=\"54\" height=\"100\" \/><\/a> Eccoci con un nuovo tutorial semplice semplice. In questo articolo vedremo come implementare un&#8217; &#8220;<em>UIProgressBar<\/em>&#8220;, ovvero la barra che si usa per segnalare all&#8217;utente il caricamento di un qualche cosa o lo svolgimento di un\u2019azione. Nel nostro caso cambieremo il colore di sfondo della nostra applicazione. Vedremo, quindi, come utilizzare la classe &#8220;<em>NSTimer<\/em>&#8220;, ovvero un temporizzatore, che ci permetter\u00e0 nel nostro caso di eseguire animazioni e transizioni con durata predefinita.<!--more--><\/p>\n<h4>1. Creiamo un nuovo progetto<\/h4>\n<p>Aprimo Xcode, selezioniamo \u201cFile -&gt; New Project\u201d. Nel men\u00f9 che ci appare selezioniamo \u201cView-based Application\u201d, clicchiamo su \u201cChoose\u2026\u201d e immettiamo come nome \u201cProgressColour\u201d e fate clic su \u201cSave\u201d. Abbiamo cos\u00ec creato il nostro nuovo progetto.<br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t073-uiprogressview-nstimer-barra-caricamento-iphone-ipad-sdk-01.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-4481\" title=\"t073-uiprogressview-nstimer-barra-caricamento-iphone-ipad-sdk-01\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t073-uiprogressview-nstimer-barra-caricamento-iphone-ipad-sdk-01.jpg\" alt=\"t073 uiprogressview nstimer barra caricamento iphone ipad sdk 01\" width=\"450\" height=\"331\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t073-uiprogressview-nstimer-barra-caricamento-iphone-ipad-sdk-01.jpg 450w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t073-uiprogressview-nstimer-barra-caricamento-iphone-ipad-sdk-01-300x220.jpg 300w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t073-uiprogressview-nstimer-barra-caricamento-iphone-ipad-sdk-01-150x110.jpg 150w\" sizes=\"auto, (max-width: 450px) 100vw, 450px\" \/><\/a><br \/>\nApriamo il file \u201cProgressColourViewController.h\u201d e definiamo i seguenti componenti:<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">#import <UIKit\/UIKit.h>\r\n\r\n@interface ProgressColourViewController : UIViewController {\r\n\tIBOutlet UILabel *progressLabel;\r\n\tIBOutlet UIProgressView *progressBar;\r\n\r\n\tIBOutlet UIButton *bottoneBlu;\r\n\tIBOutlet UIButton *bottoneRosso;\r\n}\r\n\r\n- (IBAction)caricamentoColore:(id)bottone;\r\n\r\n@end<\/pre>\n<p>La label definita alla riga 4 servir\u00e0 per mostrare un messaggio all\u2019utente sul grado di completamento dell\u2019animazione, mentre la UIProgressBar dar\u00e0 la stessa informazioni ma in maniera pi\u00f9 visiva (\u00e8 una classica barra di caricamento). Abbiamo, inoltre, dichiarato anche due bottoni UIButton: vedremo, poi, il perch\u00e8 di questa dichiarazione.<br \/>\nL&#8217;azione alla riga 11 verr\u00e0 associata ad entrambi i bottoni, infatti sar\u00e0 questo metodo ad avviare il cambio di colore dello sfondo. Nell&#8217;intestazione di questo metodo c&#8217;\u00e8 anche un parametro &#8220;bottone&#8221; di tipo &#8220;id&#8221;: questo ci servir\u00e0 per determinare quale bottone ha invocato il metodo, in modo da poter caricare il colore scelto dall&#8217;utente.<\/p>\n<p>Possiamo ora iniziare a definire l\u2019aspetto grafico dell\u2019applicazione, aprendo il file \u201cProgressColourViewController.xib\u201d.<\/p>\n<h4>2. Definiamo l\u2019aspetto grafico dell\u2019applicazione<\/h4>\n<p>Inseriamo nella nostra vista i primi due componenti necessari: una UILabel e una UIProgressView. Ricreate una disposizione simile a questa (ovviamente nessuno vi vieta di personalizzarla a vostro piacimento):<br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t073-uiprogressview-nstimer-barra-caricamento-iphone-ipad-sdk-02.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-4482\" title=\"t073-uiprogressview-nstimer-barra-caricamento-iphone-ipad-sdk-02\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t073-uiprogressview-nstimer-barra-caricamento-iphone-ipad-sdk-02.jpg\" alt=\"t073 uiprogressview nstimer barra caricamento iphone ipad sdk 02\" width=\"400\" height=\"582\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t073-uiprogressview-nstimer-barra-caricamento-iphone-ipad-sdk-02.jpg 400w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t073-uiprogressview-nstimer-barra-caricamento-iphone-ipad-sdk-02-206x300.jpg 206w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t073-uiprogressview-nstimer-barra-caricamento-iphone-ipad-sdk-02-103x150.jpg 103w\" sizes=\"auto, (max-width: 400px) 100vw, 400px\" \/><\/a><br \/>\nCome potete notare la label e la barra di progresso occupano quasi per intero la larghezza della vista, questo per rendere pi\u00f9 evidente ci\u00f2 che avviene. Selezioniamo la label e apriamo \u201cAttributes Inspector\u201d, per modificare alcune propriet\u00e0:<\/p>\n<ul>\n<li>cancellate il contenuto del campo \u201cText\u201d;<\/li>\n<li>\u201cFont Size\u201d: 20<\/li>\n<li>allineamento centrale.<\/li>\n<\/ul>\n<p>Selezioniamo ora la UIProgressView e, sempre in \u201cAttributes Inspector\u201d, impostiamo il valore della casella \u201cProgress\u201d a zero. Inseriamo ora nella vista due bottoni, in modo da avere un risultato finale come questo:<br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t073-uiprogressview-nstimer-barra-caricamento-iphone-ipad-sdk-03.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-4483\" title=\"t073-uiprogressview-nstimer-barra-caricamento-iphone-ipad-sdk-03\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t073-uiprogressview-nstimer-barra-caricamento-iphone-ipad-sdk-03.jpg\" alt=\"t073 uiprogressview nstimer barra caricamento iphone ipad sdk 03\" width=\"400\" height=\"582\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t073-uiprogressview-nstimer-barra-caricamento-iphone-ipad-sdk-03.jpg 400w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t073-uiprogressview-nstimer-barra-caricamento-iphone-ipad-sdk-03-206x300.jpg 206w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t073-uiprogressview-nstimer-barra-caricamento-iphone-ipad-sdk-03-103x150.jpg 103w\" sizes=\"auto, (max-width: 400px) 100vw, 400px\" \/><\/a><br \/>\nAbbiamo gi\u00e0 concluso la creazione della parte grafica della nostra applicazione. Non ci resta che collegare i componenti che abbiamo definito ad inizio tutorial. Dal Pannello dei Documenti selezioniamo, come sempre, il \u201cFile\u2019s Owner\u201d e apriamo il \u201cConnections Inspector\u201d. Dovreste avere un pannello cos\u00ec composto:<\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/Schermata-2010-10-04-a-18.05.34.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-4586\" title=\"Schermata 2010-10-04 a 18.05.34\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/Schermata-2010-10-04-a-18.05.34.png\" alt=\"\" width=\"301\" height=\"292\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/Schermata-2010-10-04-a-18.05.34.png 301w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/Schermata-2010-10-04-a-18.05.34-300x291.png 300w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/Schermata-2010-10-04-a-18.05.34-150x145.png 150w\" sizes=\"auto, (max-width: 301px) 100vw, 301px\" \/><\/a><\/p>\n<p>Colleghiamo l\u2019elemento \u201cprogressLabel\u201d con la label vuota presente sopra la barra, e \u201cprogressBar\u201d con la barra stessa. Colleghiamo anche gli elementi &#8220;bottoneBlu&#8221; e &#8220;bottoneRosso&#8221; con i due relativi pulsanti. Colleghiamo, infine, l&#8217;azione &#8220;caricamentoColore&#8221; con entrambi i bottoni, selezionando &#8220;Touch Up Inside&#8221; dal men\u00f9 a tendina che si presenta. Se avete eseguito tutto in maniera corretta dovreste avere questo risultato:<\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/Schermata-2010-10-04-a-18.08.56.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-4587\" title=\"Schermata 2010-10-04 a 18.08.56\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/Schermata-2010-10-04-a-18.08.56.png\" alt=\"\" width=\"301\" height=\"328\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/Schermata-2010-10-04-a-18.08.56.png 301w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/Schermata-2010-10-04-a-18.08.56-275x300.png 275w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/Schermata-2010-10-04-a-18.08.56-137x150.png 137w\" sizes=\"auto, (max-width: 301px) 100vw, 301px\" \/><\/a><\/p>\n<p>Abbiamo cos\u00ec terminato questa fase. Salviamo e chiudiamo Interface Builder.<\/p>\n<h4>3. Scriviamo il codice necessario<\/h4>\n<p>Dobbiamo ora definire due elemento e un paio di metodi che non abbiamo scritto inizialmente. Apriamo il file \u201cProgressColourViewController.h\u201d e inserite le dichiarazioni mancanti:<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">#import <UIKit\/UIKit.h>\r\n\r\n@interface ProgressColourViewController : UIViewController {\r\nIBOutlet UILabel *progressLabel;\r\nIBOutlet UIProgressView *progressBar;\r\n\r\nIBOutlet UIButton *bottoneBlu;\r\nIBOutlet UIButton *bottoneRosso;\r\n\r\nNSTimer *timer;\r\nUIColor *colore;\r\n}\r\n\r\n@property (nonatomic, retain) NSTimer *timer;\r\n@property (nonatomic, retain) UIColor *colore;\r\n\r\n- (IBAction)caricamentoColore:(id)bottone;\r\n- (void)aggiornaColore ;\r\n- (void)applicaColore ;\r\n\r\n@end<\/pre>\n<p>Abbiamo definito un componente \u201c<strong>NSTimer<\/strong>\u201d (alla riga 10), che sar\u00e0 il temporizzatore che ci permetter\u00e0 di eseguire l\u2019animazione prevista. Nella riga successiva \u00e8 definito un elemento UIColor, che servir\u00e0 per tener traccia del colore che deve essere applicato allo sfondo.<\/p>\n<p>Sono stati dichiarati, inoltre, due nuovi metodi, che ci serviranno per implementare le azioni necessarie (righe 18 e 19).<\/p>\n<p>Passiamo ora al file \u201cProgressColourViewController.m\u201d e iniziamo ad implementare i metodi necessari. Inseriamo il seguente codice:<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">#import \"ProgressColourViewController.h\"\r\n\r\n@implementation ProgressColourViewController\r\n\r\n@synthesize timer;\r\n@synthesize colore;\r\n\r\n- (IBAction)caricamentoColore:(id)bottone {\r\n\tprogressBar.progress = 0.0;\r\n\r\n\tif (bottone == bottoneBlu){\r\n\t\tprogressLabel.text = @\"Caricamento colore blu...\";\r\n\t\tcolore = [UIColor blueColor];\r\n\t}else if (bottone == bottoneRosso) {\r\n\t\tprogressLabel.text = @\"Caricamento colore rosso...\";\r\n\t\tcolore = [UIColor redColor];\r\n\t}\r\n\ttimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(aggiornaColore) userInfo:nil repeats:YES];\r\n}<\/pre>\n<p>Questo metodo si occupa di avviare il caricamento del colore scelto dall&#8217;utente. Alla riga 9 viene settato il valore di progresso della barra a zero (tale valore di default va da 0.0 a 1.0, ma questo intervallo pu\u00f2 essere modificato a piacere). Troviamo, poi, un controllo sul bottone che ha invocato il metodo (riga 10): se il bottone premuto dall&#8217;utente \u00e8 quello per il colore blu, impostiamo la label indicando che viene caricato il blu, e assegniamo alla variabile &#8220;colore&#8221; il valore &#8220;[UIColor blueColor]&#8221;. Questo \u00e8 un elemento predefinito della classe UIColor, che ci permette di utilizzare colori standard in maniera semplice e veloce. Nello stesso modo lavora la clausola &#8220;else if&#8221;, ovviamente controllando se il bottone premuto \u00e8 quello per il colore rosso.<\/p>\n<p>Alla riga 17, infine, viene definita la variabile timer, istanziandola con la classe NSTimer. Ci sono tre parametri molto importanti in questa funzione: la durata di 1 secondo (alla clausola \u201cscheduledTimerWithTimeInterval\u201d), il metodo che deve essere eseguito ad ogni ripetizione (clausola \u201c@selector()\u201d) e la ripetizione continua di tale intervallo di tempo (impostata tramite \u201crepeats:YES\u201c).<\/p>\n<p>Proseguiamo con la definizione dei metodi:<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">- (void)aggiornaColore {\r\n\tprogressBar.progress = progressBar.progress + 0.1;\r\n\tif (progressBar.progress == 0.5){\r\n\t\tprogressLabel.text = @\"Applicando colore\u2026\";\r\n\t\t[self applicaColore];\r\n\t}\r\n\tif (progressBar.progress == 1.0){\r\n\t\tprogressLabel.text = @\"Colore applicato!\";\r\n\t\t[timer invalidate];\r\n\t}\r\n}<\/pre>\n<p>Alla riga 2 incrementiamo il valore della nostra barra di progresso, aumentandone il valore del 10%. Alla riga 3 troviamo un controllo if, che verifica se il valore della barra \u00e8 0.5 (ovvero siamo a met\u00e0): in caso affermativo, cambiamo il testo presente nella label, altrimenti lasciamo tutto invariato. Anche alla riga 7 un ciclo if controlla se la barra di progresso \u00e8 arrivata al suo valore massimo: in tal caso inseriamo un nuovo testo nella label, e fermiamo il timer (con l\u2019istruzione alla riga 9).<\/p>\n<p>Nel primo ciclo if che abbiamo esaminato, notiamo che alla riga 5 viene richiamato il metodo \u201capplicaColore\u201d: tale metodo avr\u00e0 il compito di cambiare il colore allo sfondo della vista, con un\u2019animazione che dovr\u00e0 durare 5 secondi (infatti siamo al 50% del progresso, e la barra avanza del 10% ogni secondo). Ecco tale metodo:<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">- (void)applicaColore {\r\n\t[UIView beginAnimations:nil context:NULL];\r\n\t[UIView setAnimationDuration:5.0];\r\n\tself.view.backgroundColor = colore;\r\n\t[UIView commitAnimations];\r\n}<\/pre>\n<p>In questi metodo viene definita l\u2019animazione che permette allo sfondo della nostra vista di cambiare colore. Alla riga 3 definiamo la durata di tale animazione (5 secondi); l\u2019istruzione successiva \u00e8 il risultato che vogliamo ottenere, ovvero il nostro colore di sfondo. Notate che il colore \u00e8 quello della variabile &#8220;colore&#8221; (scusate il gioco di parole), che abbiamo settato nel metodo &#8220;caricamentoColore&#8221;. Chiude il gruppo di istruzioni la riga 5, che avvia l\u2019animazione.<\/p>\n<p>Clicchiamo su \u201cBuild and Go!\u201d e testiamo la nostra applicazione!<\/p>\n<tbody>\n<tr>\n<td><a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t073-uiprogressview-nstimer-barra-caricamento-iphone-ipad-sdk-06.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-4486\" title=\"t073-uiprogressview-nstimer-barra-caricamento-iphone-ipad-sdk-06\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t073-uiprogressview-nstimer-barra-caricamento-iphone-ipad-sdk-06.jpg\" alt=\"t073 uiprogressview nstimer barra caricamento iphone ipad sdk 06\" width=\"161\" height=\"300\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t073-uiprogressview-nstimer-barra-caricamento-iphone-ipad-sdk-06.jpg 161w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t073-uiprogressview-nstimer-barra-caricamento-iphone-ipad-sdk-06-80x150.jpg 80w\" sizes=\"auto, (max-width: 161px) 100vw, 161px\" \/><\/a><\/td>\n<td><a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t073-uiprogressview-nstimer-barra-caricamento-iphone-ipad-sdk-07.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-4494\" title=\"t073-uiprogressview-nstimer-barra-caricamento-iphone-ipad-sdk-07\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t073-uiprogressview-nstimer-barra-caricamento-iphone-ipad-sdk-07.jpg\" alt=\"t073 uiprogressview nstimer barra caricamento iphone ipad sdk 07\" width=\"161\" height=\"300\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t073-uiprogressview-nstimer-barra-caricamento-iphone-ipad-sdk-07.jpg 161w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t073-uiprogressview-nstimer-barra-caricamento-iphone-ipad-sdk-07-80x150.jpg 80w\" sizes=\"auto, (max-width: 161px) 100vw, 161px\" \/><\/a><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"text-align: center;\"><a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/ProgressColour1.zip\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/05\/download_icon.png\" alt=\"\" width=\"33\" height=\"40\" align=\"middle\" \/><\/a> Se avete problemi con il tutorial, <a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/ProgressColour1.zip\">questo \u00e8 il nostro file di progetto.<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Eccoci con un nuovo tutorial semplice semplice. In questo articolo vedremo come implementare un&#8217; &#8220;UIProgressBar&#8220;, ovvero la&#8230;<\/p>\n","protected":false},"author":254,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[216,126,423,125,422,48],"class_list":["post-4477","post","type-post","status-publish","format-standard","hentry","category-tutorial-pratici","tag-andrea-busi","tag-nstimer","tag-scheduledtimerwithtimeinterval","tag-uilabel","tag-uiprogressbar","tag-uiprogressview"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/4477","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/users\/254"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/comments?post=4477"}],"version-history":[{"count":17,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/4477\/revisions"}],"predecessor-version":[{"id":4591,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/4477\/revisions\/4591"}],"wp:attachment":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media?parent=4477"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/categories?post=4477"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/tags?post=4477"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}