{"id":6283,"date":"2011-03-21T15:25:55","date_gmt":"2011-03-21T14:25:55","guid":{"rendered":"http:\/\/www.devapp.it\/wordpress\/?p=6283"},"modified":"2011-03-21T15:25:55","modified_gmt":"2011-03-21T14:25:55","slug":"t090-implementiamo-il-pull-down-to-refresh-nelle-nostre-tabelle","status":"publish","type":"post","link":"https:\/\/www.devapp.it\/wordpress\/t090-implementiamo-il-pull-down-to-refresh-nelle-nostre-tabelle\/","title":{"rendered":"T#090 &#8211; Implementiamo il &#8220;Pull down to refresh&#8221; nelle nostre tabelle!"},"content":{"rendered":"<p>Una delle caratteristiche pi\u00f9 in voga delle applicazioni per iPhone che fanno uso di tabelle \u00e8 sicuramente il famoso &#8220;Pull down to refresh&#8221;. Questa funzione permette di ricaricare i dati semplicemente trascinando verso il basso la tabella stessa. Essa \u00e8 utilizzata in moltissime applicazioni di successo, come Twitter, Facebook e nientepopodimeno che &#8220;<a href=\"http:\/\/clk.tradedoubler.com\/click?p=24373&#038;a=1735897&#038;g=0&#038;url=http:\/\/itunes.apple.com\/it\/app\/orologi-di-classe-plus\/id409332404?mt=8&#038;partnerId=2003\" target=\"_blank\">Orologi di Classe PLUS<\/a>&#8221; (piccola pubblicit\u00e0 occulta :P):<\/p>\n<p>Implementare questa funzionalit\u00e0 non \u00e8 cos\u00ec difficile come pu\u00f2 sembrare, esiste infatti un&#8217;ottima libreria che mette a disposizione il codice gi\u00e0 bello che pronto: si tratta di <a href=\"https:\/\/github.com\/jessedc\/EGOTableViewPullRefresh\" target=\"_blank\">EGOTableViewPullrefresh<\/a>, e noi lo utilizzeremo in questo tutorial.<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/Photo-mar-21-12-45-15-p..jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/Photo-mar-21-12-45-15-p.-200x300.jpg\" alt=\"\" title=\"Photo mar 21, 12 45 15 p.\" width=\"200\" height=\"300\" class=\"alignnone size-medium wp-image-6287\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/Photo-mar-21-12-45-15-p.-200x300.jpg 200w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/Photo-mar-21-12-45-15-p..jpg 640w\" sizes=\"auto, (max-width: 200px) 100vw, 200px\" \/><\/a> <a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/Photo-mar-21-12-45-00-p..jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/Photo-mar-21-12-45-00-p.-200x300.jpg\" alt=\"\" title=\"Photo mar 21, 12 45 00 p.\" width=\"200\" height=\"300\" class=\"alignnone size-medium wp-image-6288\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/Photo-mar-21-12-45-00-p.-200x300.jpg 200w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/Photo-mar-21-12-45-00-p.-100x150.jpg 100w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/Photo-mar-21-12-45-00-p..jpg 640w\" sizes=\"auto, (max-width: 200px) 100vw, 200px\" \/><\/a><br \/>\n<\/center><!--more--><\/p>\n<h4>1. Creiamo un progetto con una tabella<\/h4>\n<p>Per prima cosa iniziamo creando un nuovo progetto del tipo &#8220;Navigation-based Application&#8221;, che ci fornisce gi\u00e0 la struttura a tabella che ci serve:<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/Schermata-2011-03-21-a-13.49.01.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/Schermata-2011-03-21-a-13.49.01-300x204.png\" alt=\"\" title=\"Schermata 2011-03-21 a 13.49.01\" width=\"300\" height=\"204\" class=\"aligncenter size-medium wp-image-6297\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/Schermata-2011-03-21-a-13.49.01-300x204.png 300w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/Schermata-2011-03-21-a-13.49.01-150x102.png 150w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/Schermata-2011-03-21-a-13.49.01.png 742w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Definiamo quindi gli elementi che saranno visualizzati all&#8217;interno della nostra tabella: essi saranno contenuti in una semplice lista (NSMutableArray). Nel file &#8220;RootViewController.h&#8221; inseriamo la seguente definizione:<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\n#import <UIKit\/UIKit.h>\r\n\r\n@interface RootViewController : UITableViewController {\r\n    NSMutableArray *listaElementi;\r\n}\r\n\r\n@end\r\n<\/pre>\n<p>Spostiamoci nel file di implementazione &#8220;RootViewController.m&#8221; e nel metodo &#8220;viewDidLoad&#8221; inizializziamo la nostra lista:<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\n- (void)viewDidLoad {\r\n    [super viewDidLoad];\r\n    self.title = @\"Lista nomi\";\r\n    listaElementi = [[NSMutableArray alloc] initWithObjects:@\"Andrea\",@\"Marco\",@\"Luigi\", nil];\r\n}\r\n<\/pre>\n<p>Fatto ci\u00f2 non ci resta che far visualizzare dalla tabella questi elementi. Modifichiamo, quindi, questi ultimi due metodi (riga 2 e riga 15):<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\n- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {\r\n    return [listaElementi count];\r\n}\r\n\r\n\/\/ Customize the appearance of table view cells.\r\n- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {\r\n    static NSString *CellIdentifier = @\"Cell\";\r\n    \r\n    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];\r\n    if (cell == nil) {\r\n        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];\r\n    }\r\n\r\n    cell.textLabel.text = [listaElementi objectAtIndex:indexPath.row];\r\n    \r\n    \/\/ Configure the cell.\r\n    return cell;\r\n}\r\n<\/pre>\n<p>Penso che questi passaggi siano ormai chiari per la maggior parte di voi, quindi non mi soffermo sulle singole istruzioni modificate. Se avete dei dubbi a riguardo leggete i tutorial dedicati alle <a href=\"http:\/\/www.devapp.it\/wordpress\/t039-usiamo-le-uitableview-parte-1-creiamo-e-popoliamo-le-nostre-tabelle.html\" target=\"_blank\">UITableView<\/a>.<\/p>\n<p>Se compiliamo ed eseguiamo l&#8217;applicazione in questo momento, tutto dovrebbe funzionare senza problemi:<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/Schermata-2011-03-21-a-13.56.42.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/Schermata-2011-03-21-a-13.56.42-159x300.png\" alt=\"\" title=\"Schermata 2011-03-21 a 13.56.42\" width=\"159\" height=\"300\" class=\"aligncenter size-medium wp-image-6302\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/Schermata-2011-03-21-a-13.56.42-159x300.png 159w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/Schermata-2011-03-21-a-13.56.42-79x150.png 79w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/Schermata-2011-03-21-a-13.56.42.png 396w\" sizes=\"auto, (max-width: 159px) 100vw, 159px\" \/><\/a><br \/>\n<\/center><\/p>\n<h4>2. Inseriamo la libreria EGOTableViewPullRefresh<\/h4>\n<p>Dobbiamo ora inserire la libreria che ci permetter\u00e0 di aggiungere il &#8220;Pull down to refresh&#8221; alla nostra applicazione. Potete scaricare la libreria con un esempio dimostrativo alla pagina di <a href=\"https:\/\/github.com\/jessedc\/EGOTableViewPullRefresh\" target=\"_blank\">Github del progetto<\/a>, oppure, se preferite, solo la classe da <a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/Classi-EGOTableViewPullrefresh.zip\" target=\"_blank\">questo link<\/a> che vi mettiamo a disposizione.<\/p>\n<p>Inseriamo nel nostro progetto le classi &#8220;PullToRefreshTableViewController&#8221; e &#8220;EGORefreshTableHeaderView&#8221;, che ci forniranno le funzionalit\u00e0 desiderate:<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/Schermata-2011-03-21-a-14.03.34.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/Schermata-2011-03-21-a-14.03.34.png\" alt=\"\" title=\"Schermata 2011-03-21 a 14.03.34\" width=\"315\" height=\"294\" class=\"aligncenter size-full wp-image-6304\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/Schermata-2011-03-21-a-14.03.34.png 315w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/Schermata-2011-03-21-a-14.03.34-300x280.png 300w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/Schermata-2011-03-21-a-14.03.34-150x140.png 150w\" sizes=\"auto, (max-width: 315px) 100vw, 315px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Inseriamo anche l&#8217;immagine della freccia che trovaviamo nel pacchetto appena scaricato (se \u00e8 diversa da quella di default &#8220;blueArrow.png&#8221; dovremo modificare il file &#8220;EGORefreshTableHeaderView&#8221; altrimenti non verr\u00e0 visualizzata):<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/Schermata-2011-03-21-a-14.17.35.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/Schermata-2011-03-21-a-14.17.35.png\" alt=\"\" title=\"Schermata 2011-03-21 a 14.17.35\" width=\"313\" height=\"376\" class=\"aligncenter size-full wp-image-6305\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/Schermata-2011-03-21-a-14.17.35.png 313w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/Schermata-2011-03-21-a-14.17.35-249x300.png 249w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/Schermata-2011-03-21-a-14.17.35-124x150.png 124w\" sizes=\"auto, (max-width: 313px) 100vw, 313px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Prima di passare al codice vero e proprio, \u00e8 necessario inserire un framework all&#8217;interno del progetto: &#8220;QuartzCore.framework&#8221;. Se utilizzate gi\u00e0, come me, XCode 4, per inserie un framework dovrete andare nel progetto, quindi nel pannello &#8220;Build Phases&#8221;, in cui troverete &#8220;Link Binary With Binaries&#8221;, da cui potrete inserire il framework QuartzCore:<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/Schermata-2011-03-21-a-14.20.18.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/Schermata-2011-03-21-a-14.20.18-300x97.png\" alt=\"\" title=\"Schermata 2011-03-21 a 14.20.18\" width=\"300\" height=\"97\" class=\"aligncenter size-medium wp-image-6306\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/Schermata-2011-03-21-a-14.20.18-300x97.png 300w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/Schermata-2011-03-21-a-14.20.18-1024x333.png 1024w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/Schermata-2011-03-21-a-14.20.18-150x48.png 150w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/Schermata-2011-03-21-a-14.20.18.png 1315w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><br \/>\n<\/center><\/p>\n<h4>3. Modifichiamo il codice necessario<\/h4>\n<p>\u00c8 venuto il momento di implementare il codice necessario per far funzionare il nostro &#8220;Pull down to refresh&#8221;.<br \/>\nIniziamo dal file &#8220;RootViewController.h&#8221;. Dobbiamo, prima di tutto, cambiare la superclasse della classe in questione (scusate il giro di parole). Modifichiamo il codice in questo modo:<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\n#import <UIKit\/UIKit.h>\r\n#import \"PullToRefreshTableViewController.h\"\r\n\r\n@interface RootViewController : PullToRefreshTableViewController {\r\n    NSMutableArray *listaElementi;\r\n}\r\n@end\r\n<\/pre>\n<p>Alla riga 2 abbiamo importato la classe &#8220;PullToRefreshTableViewController&#8221; necessaria, mentre alla riga 4 abbiamo cambiato la superclasse di RootViewController, che in precedenza era <em>UITableViewController<\/em>. Questa modifica ci permetter\u00e0 di riutilizzare il codice presente nella classe &#8220;PullToRefreshTableViewController&#8221;, grazie all&#8217;ereditariet\u00e0, un paradigma fondamentale della programmazione ad oggetti.<br \/>\nPassiamo al file &#8220;RootViewController.m&#8221;, in cui ci saranno pi\u00f9 modifiche da fare. La prima \u00e8 semplice ed \u00e8 da inserire nel metodo &#8220;viewDidLoad&#8221; (riga 7):<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\n- (void)viewDidLoad {\r\n    [super viewDidLoad];\r\n    self.title = @\"Lista nomi\";\r\n    \/\/ definiamo la lista degli oggetti\r\n    listaElementi = [[NSMutableArray alloc] initWithObjects:@\"Andrea\",@\"Marco\",@\"Luigi\", nil];\r\n    \/\/ settiamo la data dell'ultimo refresh (in questo caso \u00e8 nil, non ci sono date precedenti)\r\n    [self.refreshHeaderView setLastRefreshDate:nil];\r\n}\r\n<\/pre>\n<p>Semplicemente abbiamo settato la data dell&#8217;ultimo refresh, che appare mentre la tabella ricarica i dati. Ovviamente si pu\u00f2 fare in modo di memorizzare l&#8217;ultimo refresh (ad esempio tramite le NSUserDefault) e di visualizzare all&#8217;avvio dell&#8217;applicazione.<\/p>\n<p>Non ci resta che inserire due semplicissimi metodi, che si occupano di ricaricare il &#8220;dataSource&#8221; della nostra tabella, ovviamente quando l&#8217;utente ha attivato il ri-caricamento dei dati. I due metodi da inserire (sempre in &#8220;RootViewController.m&#8221;) sono i seguenti:<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\n- (void)reloadTableViewDataSource{\r\n\t\/\/  qui possiamo richiamare metodi specifici per ricaricare i dati\r\n    [listaElementi addObject:@\"Fabrizio\"];\r\n    [listaElementi addObject:@\"Kevin\"];\r\n\t[super performSelector:@selector(dataSourceDidFinishLoadingNewData) withObject:nil afterDelay:3.0];\r\n\t\r\n}\r\n- (void)dataSourceDidFinishLoadingNewData{\r\n\t\/\/ settiamo la data corrente come ultimo refresh\r\n    [refreshHeaderView setCurrentDate];\t\r\n\t[super dataSourceDidFinishLoadingNewData];\r\n    [self.tableView reloadData];\r\n}\r\n<\/pre>\n<p>Nel primo metodo possiamo richiamare dei metodi specifici per aggiornare il nostro dataSource (ad esempio scaricandoli da un feed RSS). Nel nostro esempio abbiamo banalmente inserito due elementi nella nostra lista, ed abbiamo richiamato il metodo &#8220;dataSourceDidFinishLoadingNewData&#8221;, che segnala il completo caricamento dei nuovi dati. Nel nostro esempio, questo ultimo metodo viene richiamato con 3 secondi di ritardo, solamente per fingere un caricamento all&#8217;utente (\u00e8 quindi per puro scopo illustrativo).<br \/>\nIl secondo metodo, invece, setta la nuova data dell&#8217;ultimo refresh (che anche in questo caso potrebbe essere gestita e salvata con NSUserDefaults) e ricarica infine la tabella.<\/p>\n<p>Molto semplice vero?<\/p>\n<p>Ora possiamo compilare ed avviare la nostra applicazione, che funzioner\u00e0 senza problemi!<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/Schermata-2011-03-21-a-14.26.54.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/Schermata-2011-03-21-a-14.26.54-159x300.png\" alt=\"\" title=\"Schermata 2011-03-21 a 14.26.54\" width=\"159\" height=\"300\" class=\"alignnone size-medium wp-image-6309\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/Schermata-2011-03-21-a-14.26.54-159x300.png 159w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/Schermata-2011-03-21-a-14.26.54-79x150.png 79w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/Schermata-2011-03-21-a-14.26.54.png 396w\" sizes=\"auto, (max-width: 159px) 100vw, 159px\" \/><\/a> <a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/Schermata-2011-03-21-a-14.26.57.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/Schermata-2011-03-21-a-14.26.57-159x300.png\" alt=\"\" title=\"Schermata 2011-03-21 a 14.26.57\" width=\"159\" height=\"300\" class=\"alignnone size-medium wp-image-6310\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/Schermata-2011-03-21-a-14.26.57-159x300.png 159w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/Schermata-2011-03-21-a-14.26.57-79x150.png 79w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/Schermata-2011-03-21-a-14.26.57.png 396w\" sizes=\"auto, (max-width: 159px) 100vw, 159px\" \/><\/a> <a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/Schermata-2011-03-21-a-14.27.00.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/Schermata-2011-03-21-a-14.27.00-159x300.png\" alt=\"\" title=\"Schermata 2011-03-21 a 14.27.00\" width=\"159\" height=\"300\" class=\"alignnone size-medium wp-image-6311\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/Schermata-2011-03-21-a-14.27.00-159x300.png 159w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/Schermata-2011-03-21-a-14.27.00-79x150.png 79w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/Schermata-2011-03-21-a-14.27.00.png 396w\" sizes=\"auto, (max-width: 159px) 100vw, 159px\" \/><\/a><br \/>\n<\/center><\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/tutorialPullDownToRefresh.zip\" target=\"_blank\"><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,\u00a0<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/tutorialPullDownToRefresh.zip\" target=\"_blank\">questo \u00e8 il nostro file di progetto (per XCode 4).<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Una delle caratteristiche pi\u00f9 in voga delle applicazioni per iPhone che fanno uso di tabelle \u00e8 sicuramente&#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,625,626,627,242,27],"class_list":["post-6283","post","type-post","status-publish","format-standard","hentry","category-tutorial-pratici","tag-andrea-busi","tag-egotableviewpullrefresh","tag-pull-down-to-refresh","tag-quartzcore-framework","tag-tutorial-xcode","tag-uitableview"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/6283","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=6283"}],"version-history":[{"count":27,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/6283\/revisions"}],"predecessor-version":[{"id":6326,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/6283\/revisions\/6326"}],"wp:attachment":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media?parent=6283"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/categories?post=6283"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/tags?post=6283"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}