iOS 5 e Twitter Framework tecniche avanzate

Nella prima parte di questo tutorial in due parti sul framework di Twitter, ho parlato di TWTweetComposeViewController. Ti ho mostrato come usare questa classe per comporre e inviare tweet con pochissimo sforzo da parte tua. In questo tutorial, parlo del più avanzato TWRequest classe. Con questa classe, puoi parlare direttamente con l'API di Twitter e questo ti dà molto più controllo e flessibilità!

Questo tutorial illustrerà anche i vantaggi dell'uso TWRequest invece di creare ed eseguire la tua richiesta HTTP e perché sei incoraggiato a utilizzare TWRequest se decidi di interagire con l'API di Twitter su iOS 5.


Sintesi del progetto

Nel primo tutorial, ti ho mostrato come aggiungere il framework di Twitter al tuo progetto e come usare il TWTweetComposeViewController classe per comporre e inviare tweet. In questo articolo, ci sposteremo un po 'più velocemente perché mi piacerebbe coprire un po' di terreno.


Prima di iniziare

Prima di iniziare, voglio ripetere che è necessario avere uno o più account Twitter installati sul dispositivo che userete per questo tutorial. Puoi anche utilizzare il simulatore iOS se non hai un dispositivo fisico con cui testarlo. Il TWRequest la classe si occupa dell'autenticazione chiedendo al sistema operativo se può accedere agli account Twitter installati sul dispositivo dell'utente. Per completare questo tutorial, assicurati di aver installato almeno un account Twitter sul tuo dispositivo o su iOS Simulator. Puoi verificarlo aprendo il impostazioni applicazione e scelta cinguettio dalla lista. Dai un'occhiata alla prima parte di questa serie in due parti per maggiori informazioni.


Passaggio 1: Impostazione del progetto

Per mostrarti quanto sia facile essere al passo con il framework di Twitter e le API di Twitter, costruiremo un'applicazione da zero. Naturalmente, non costruiremo un client Twitter completo, ma sarete sorpresi di quanto sia facile essere operativi con pochissimo tempo e sforzi. Questo è tutto grazie alla stretta integrazione di Twitter con iOS.

Crea un nuovo progetto Xcode scegliendo il Applicazione vista singola modello dall'elenco dei modelli. Dai un nome alla tua domanda Twitter Rocks, inserire un identificativo aziendale, impostare i phone per la famiglia di dispositivi e controllare Utilizzare il conteggio di riferimento automatico. Puoi lasciare deselezionate le restanti caselle di controllo per questo progetto. Dillo a Xcode dove vuoi salvare il tuo progetto e colpire Creare.


Passaggio 2: impostazione dell'interfaccia utente

Prima di iniziare a lavorare con TWRequest classe, voglio prima occuparmi dell'interfaccia utente. Per questo tutorial, useremo una vista tabella per visualizzare i dati che torniamo da Twitter, cioè i tweet. Seleziona il file di intestazione del controller di visualizzazione e crea due prese, una per la vista tabella e un'altra per un'istanza di UIActivityIndicatorView. La visualizzazione dell'indicatore di attività sarà visibile mentre attendiamo che la nostra richiesta restituisca una risposta. Dichiariamo anche una variabile di istanza denominata fonte di dati che manterrà i risultati (tweet) della nostra richiesta. Servirà come origine dati della nostra vista tabella. Un'istanza di NSArray è perfetto per i nostri bisogni. Assicurarsi che il controller di visualizzazione sia conforme all'origine dati della vista tabella e ai protocolli delegati.

Prima di creare la nostra interfaccia utente, dobbiamo anche aggiungere due azioni al file di intestazione del nostro controller di visualizzazione. La prima azione requestTimeline: avvia la richiesta che recupera la cronologia pubblica dell'account Mobiletuts + Twitter. La seconda azione, requestMentions:, avvia la richiesta che recupera le menzioni dell'account Twitter installato sul dispositivo. Non preoccuparti di queste azioni ancora. Spiegherò tutto in modo più dettagliato una volta che avremo iniziato a implementarli.

Non dimenticare di sintetizzare gli accessor per i nostri punti vendita nel nostro file di implementazione del controller di visualizzazione e aggiungere un'implementazione vuota per ogni azione per impedire eventuali avvisi del compilatore.

 #importare  @interface ViewController: UIViewController  __wite UITableView * _tableView; __basso UIActivityIndicatorView * _activityIndicatorView; NSArray * _dataSource;  @property (nonatomic, weak) IBOutlet UITableView * tableView; @property (nonatomic, weak) IBOutlet UIActivityIndicatorView * activityIndicatorView; @property (nonatomic, strong) NSArray * dataSource; - (IBAction) requestTimeline: (id) mittente; - (IBAction) requestMentions: (id) mittente; @fine
 @synthesize tableView = _tableView, activityIndicatorView = _activityIndicatorView; @synthesize dataSource = _dataSource;
 - (IBAction) requestTimeline: (id) sender  - (IBAction) requestMentions: (id) sender 

Vai al file XIB del nostro controller di visualizzazione e inizia trascinando una barra degli strumenti nella parte inferiore della vista del controller della vista. Per impostazione predefinita, la barra degli strumenti ha un pulsante, quindi trasciniamo un'altra istanza di UIBarButtonItem alla barra degli strumenti. Mantenetelo organizzato trascinando un'istanza di spazio flessibile tra i due pulsanti della barra per spingere i pulsanti sui lati opposti. Seleziona il pulsante sinistro e, nel menu Ispettore degli attributi (terza scheda da destra), immettere Sequenza temporale nel Titolo campo. Dare il pulsante giusto un titolo di menzioni. Controlla il trascinamento dalla voce del pulsante della barra sinistra a Proprietario del file e selezionare il requestTimeLine: azione dal menu che si apre. Fai lo stesso per la voce del pulsante della barra di destra, ma seleziona requestMentions: azione dallo stesso menu.

L'interfaccia utente è quasi finita. Trascina una vista tabella e una visualizzazione dell'indicatore di attività sulla vista del nostro controller di visualizzazione. Posiziona la visualizzazione dell'indicatore di attività al centro della vista del controller della vista e seleziona la casella di controllo accanto a Si nasconde quando si ferma nel Ispettore degli attributi. Collega entrambe le visualizzazioni con le prese che abbiamo dichiarato un minuto fa controllando il trascinamento dal Proprietario del file alla vista tabella e vista indicatore di attività. Infine, seleziona la vista tabella, apri il Connections Inspector, e puntare il fonte di dati e delegare punti vendita della vista tabella al Proprietario del file oggetto.

Interfaccia utente? Fatto.


Passaggio 3: implementazione della vista tabella

Dobbiamo lavorare ancora un po 'prima di poter iniziare a giocare con il framework di Twitter. Oltre a implementare le nostre azioni, che faremo in un minuto, dobbiamo assicurarci che i metodi richiesti dalla tabella visualizzino il protocollo di origine dati. Anche se abbiamo assegnato il nostro controller di visualizzazione come delegato della vista tabella, in questa esercitazione non implementeremo nessuno dei metodi di delega della vista tabella. Il primo metodo che implementeremo è numberOfSectionsInTableView:. L'implementazione è semplice. Ci assicuriamo che la nostra origine dati sia impostata e restituisca 1 se lo è o 0 se non lo è. Facile. Destra?

 - (NSInteger) numberOfSectionsInTableView: (UITableView *) tableView if (self.dataSource) return 1;  else return 0; 

Il secondo metodo di origine dati è quasi identico. Nel tableView: numberOfRowsInSection:, verifichiamo che l'origine dati sia impostata e se lo è restituiamo il numero di elementi nell'origine dati. Se la nostra fonte di dati non è impostata, restituiamo 0.

 - (NSInteger) tableView: (UITableView *) tableView numberOfRowsInSection: (NSInteger) section if (self.dataSource) return self.dataSource.count;  else return 0; 

Nel tableView: cellForRowAtIndexPath:, dichiariamo un identificatore di riutilizzo statico (per il riutilizzo delle celle di visualizzazione tabella) e chiediamo la vista tabella per una cella che possiamo riutilizzare. Se la vista tabella non restituisce una cella riutilizzabile, inizializziamo una nuova cella. Non configureremo ancora la cella. Per prima cosa dobbiamo sapere come sono fatti i dati che otteniamo da Twitter.

 - (UITableViewCell *) tableView: (UITableView *) aTableView cellForRowAtIndexPath: (NSIndexPath *) indexPath static NSString * CellIdentifier = @ "Cell Identifier"; UITableViewCell * cell = [aTableView dequeueReusableCellWithIdentifier: CellIdentifier]; if (cell == nil) cell = [[UITableViewCell alloc] initWithStyle: UITableViewCellStyleSubtitle riuseIdentifier: CellIdentifier];  // To Be Continued restituisce cell; 

Passaggio 4: aggiunta di Twitter Framework

Prima di poter iniziare a utilizzare il framework Twitter, dobbiamo collegare il nostro progetto a questo. Se vogliamo anche fare richieste autenticate, dobbiamo anche collegare il nostro progetto alla struttura degli account. Facciamolo adesso.

Seleziona il tuo progetto nel Project Navigator e seleziona il nostro obiettivo dalla lista dei bersagli. Scegliere Costruisci fasi in alto, apri il Collega binario con le librerie cassetto e aggiungere i framework Twitter e Accounts al progetto.

Se hai letto la prima parte di questo tutorial, potresti ricordare che dobbiamo anche importare le intestazioni framework nel file di intestazione del nostro controller di visualizzazione per poter utilizzare questi framework nel nostro controller di visualizzazione. Inseriscili subito dopo l'istruzione di importazione di UIKit.

 #importare  #importare  #importare 

Step 5: Earth To Twitter

Ci sono due cose che voglio mostrarti, (1) come inviare tweet non autenticati e (2) come inviare richieste autenticate all'API di Twitter. La differenza è ovvia, ma c'è una differenza importante in termini di esperienza utente. Se un'applicazione iOS vuole inviare una richiesta autenticata all'API di Twitter, l'utente deve concedere esplicitamente l'autorizzazione dell'applicazione per accedere agli account Twitter installati sul dispositivo. In altre parole, l'autenticazione viene eseguita automaticamente quando si utilizza il framework Twitter, ma l'utente mantiene il controllo in termini di concessione o negazione dell'accesso ai propri account Twitter..


Passaggio 6: richieste Twitter non autenticate

Per illustrare come funzionano le richieste Twitter non autenticate, richiederemo la sequenza temporale dell'account Mobiletuts + Twitter. La magia accadrà nel nostro requestTimeline: metodo. Come sempre, ti guiderò passo passo attraverso l'implementazione. Prima di inviare la nostra richiesta a Twitter, nascondiamo la nostra vista tabella e mostriamo la nostra visualizzazione dell'indicatore di attività inviandola a startAnimating Messaggio. Successivamente, creiamo l'URL per la nostra richiesta di Twitter. Non parlerò delle specifiche dell'API di Twitter in questo tutorial perché voglio concentrarmi sull'aspetto iOS dell'interrogazione dell'API. Per ulteriori informazioni sull'API di Twitter, consultare la documentazione.

Nostro TWRequest istanza, che creeremo a breve, accetta un dizionario di parametri. Questi parametri ti consentono di perfezionare la tua richiesta. Nel nostro esempio, specifichiamo di quale timeline vogliamo vedere, quanti tweet vogliamo recuperare, e impostiamo anche il flag per include_entities a 1. Le entità sono incredibilmente utili. Invece di ricevere solo il testo di un tweet, le entità rappresentano le parti interessanti di un tweet, come immagini, URL o menzioni di altri utenti di Twitter nel tweet.

 [self.tableView setHidden: YES]; [self.activityIndicatorView startAnimating]; NSURL * url = [NSURL URLWithString: @ "http://api.twitter.com/1/statuses/user_timeline.json"]; NSMutableDictionary * parameters = [[NSMutableDictionary alloc] init]; [parametri setObject: @ "envatomobile" forKey: @ "screen_name"]; [parametri setObject: @ "50" forKey: @ "count"]; [parameters setObject: @ "1" forKey: @ "include_entities"];

È tempo di creare il nostro TWRequest esempio. Inizializziamo con (1) il nostro URL, (2) il nostro dizionario di parametri e (3) un metodo di richiesta (TWRequestMethod). Quest'ultimo è il verbo HTTP. Nel nostro caso, usiamo TWRequestMethodGET, che corrisponde a una richiesta GET. Le altre opzioni sono TWRequestMethodPOST e TWRequestMethodDELETE.

 TWRequest * request = [[TWRequest alloc] initWithURL: parametri url: parameters requestMethod: TWRequestMethodGET];

Ora possiamo eseguire la nostra richiesta chiamando performRequestWithHandler: sulla nostra istanza di richiesta. Amo i blocchi e questo metodo, come molti metodi iOS 5, prende un blocco (TWRequestHandler) come unico parametro. Il blocco viene eseguito non appena riceviamo la risposta che l'API di Twitter ci invia. Il blocco accetta tre parametri, (1) i dati di risposta grezza, (2) la risposta HTTP della nostra richiesta e (3) un errore nel caso in cui qualcosa è andato storto.

Prima di dare un'occhiata al gestore della richiesta stesso, è importante sapere che ci aspettiamo una risposta JSON (dai un'occhiata all'ultimo componente del nostro URL di richiesta). Il gestore richieste, tuttavia, ci fornisce un'istanza di NSData. Ciò significa che dobbiamo prima serializzare questo oggetto dati usando NSJSONSerialization, che ci fornirà un array contenente i tweet che abbiamo richiesto.

Nel gestore della richiesta, per prima cosa controlliamo se l'oggetto dei dati di risposta non lo è zero. In questo caso, serializziamo l'oggetto dei dati di risposta e assegniamo il valore di ritorno al nostro oggetto di origine dati. È sempre importante verificare gli errori quando si effettuano richieste a un servizio Web poiché non si sa mai cosa si intende recuperare. Nel nostro esempio, controlliamo se il nostro oggetto di origine dati non lo è zero. In questo caso, ricarichiamo e mostriamo la vista tabella e nascondiamo la vista dell'indicatore di attività inviandola a stopAnimating Messaggio. Se la nostra richiesta non ha restituito ciò che ci aspettavamo, registriamo l'errore appropriato sulla console.

 [request performRequestWithHandler: ^ (NSData * responseData, NSHTTPURLResponse * urlResponse, NSError * error) if (responseData! = nil) NSError * error = nil; self.dataSource = [NSJSONSerialization JSONObjectWithData: responseData options: NSJSONReadingMutableLeaves error: & error]; if (self.dataSource! = nil) [self.tableView reloadData]; [self.tableView setHidden: NO]; [self.activityIndicatorView stopAnimating];  else NSLog (@ "Errore serializzazione dei dati di risposta% @ con informazioni utente% @.", errore, error.userInfo);  else NSLog (@ "Errore nel richiedere la timeline% @ con informazioni utente% @.", errore, error.userInfo); ];

Se vuoi sapere come è strutturato ciascun tweet, ti incoraggio a registrare l'oggetto dei dati di risposta serializzati sulla console. Non entrerò nei dettagli perché voglio mantenere l'attenzione su questo tutorial sullo sviluppo di iOS. Prima di poter visualizzare qualsiasi cosa nella nostra vista tabella, dobbiamo finalizzare il nostro tableView: cellForRowAtIndexPath: metodo. La configurazione della cella è semplice e non così semplice. Dai un'occhiata alla completa implementazione qui sotto.

 - (UITableViewCell *) tableView: (UITableView *) aTableView cellForRowAtIndexPath: (NSIndexPath *) indexPath static NSString * CellIdentifier = @ "Cell Identifier"; UITableViewCell * cell = [aTableView dequeueReusableCellWithIdentifier: CellIdentifier]; if (cell == nil) cell = [[UITableViewCell alloc] initWithStyle: UITableViewCellStyleSubtitle riuseIdentifier: CellIdentifier];  NSDictionary * tweet = [self.dataSource objectAtIndex: indexPath.row]; cell.textLabel.text = [tweet objectForKey: @ "text"]; cell.imageView.image = [UIImage imageNamed: @ "placeholder"]; dispatch_queue_t queue = dispatch_queue_create ("com.mobiletuts.task", NULL); dispatch_queue_t main = dispatch_get_main_queue (); dispatch_async (queue, ^ NSURL * imageURL = [NSURL URLWithString: [[tweet objectForKey: @ "utente"] objectForKey: @ "profile_image_url"]]; NSData * imageData = [NSData dataWithContentsOfURL: imageURL]; dispatch_async (main, ^  cell.imageView.image = [UIImage imageWithData: imageData];);); dispatch_release (coda); cella di ritorno; 

Per prima cosa, recuperiamo il tweet corretto dal nostro array di origini dati. Ogni tweet è un'istanza di NSDictionary. Nell'etichetta di testo della nostra cella, visualizziamo il tweet stesso ottenendo il valore per la chiave testo. Ovviamente, un'applicazione Twitter non sarebbe completa senza immagini. Ogni tweet ci fornisce l'URL dell'immagine del profilo della persona che ha inviato il tweet. Se hai letto uno dei miei tutorial precedenti, potresti avere un'idea di ciò che sto per dire in seguito. Se dovessimo richiedere l'immagine del profilo per ogni tweet sul thread principale, le prestazioni della nostra vista tabella sarebbero terribili. Il nostro thread principale sarebbe stato bloccato ogni volta che veniva fatta una richiesta e lo scorrimento sarebbe stato tutt'altro che fluido. Mi piace liscio, quindi dobbiamo sistemarlo.

Una possibile soluzione è usare Grand Central Dispatch o GCD. Non entrerò nei dettagli di GCD in questo tutorial, ma l'idea è semplice. Facciamo la richiesta per ogni immagine del profilo su un thread separato. Dopo aver ricevuto i dati, creiamo a UIImage dai dati e impostare l'immagine della vista dell'immagine della cella con quell'immagine. È vitale che quest'ultimo sia fatto sul thread principale per diversi motivi. Non preoccuparti se non capisci completamente cosa sta succedendo, perché non è il fulcro di questo tutorial.

In alternativa, puoi usare una libreria come AFNetworking per astrarre i dettagli nitidi-grintosi. Dai un'occhiata a uno dei miei tutorial precedenti per maggiori informazioni su AFNetworking biblioteca.

Si noti che, prima di richiedere l'immagine del profilo, ho impostato l'immagine della vista dell'immagine della cella con un'immagine segnaposto. Questo è necessario per evitare che alcune stranezze visive si presentino.

Costruisci ed esegui la tua applicazione. Tocca il pulsante Timeline in basso a sinistra per scaricare i tweet per la cronologia pubblica dell'account Mobile Tuts + Twitter. Non ti ho detto che mi piacciono le viste a tavola scorrevole? Come puoi vedere, al momento non esiste alcuna forma di memorizzazione nella cache. In altre parole, l'immagine profilo dell'account Mobiletuts + Twitter viene recuperata più volte inutilmente. Sentiti libero di risolvere questo problema con la tua soluzione di caching personalizzata.


Passaggio 7: richieste Twitter autenticate

Le richieste di Twitter autenticate sono molto simili alle richieste non autenticate. Abbiamo solo bisogno di fare un po 'di lavoro extra per eseguire una richiesta di Twitter autenticata. Diamo un'occhiata alla realizzazione del nostro requestMentions: metodo passo-passo.

 [self.tableView setHidden: YES]; [self.activityIndicatorView startAnimating]; ACAccountStore * accountStore = [[ACAccountStore alloc] init]; ACAccountType * accountType = [accountStore accountTypeWithAccountTypeIdentifier: ACAccountTypeIdentifierTwitter];

Per prima cosa, nascondiamo la nostra vista tabella e mostriamo la nostra vista dell'indicatore di attività inviandogli un messaggio di startAnimating. Inizializziamo quindi un archivio account (ACAccountStore). Questo oggetto ci consentirà di accedere agli account Twitter installati sul dispositivo. Successivamente, creiamo un'istanza di ACAccountType a chiamata accountTypeWithAccountTypeIdentifier: sull'istanza del nostro account store. Questo metodo accetta un parametro, ovvero il tipo di account a cui vogliamo accedere. Nel nostro esempio, vogliamo accedere agli account Twitter sul dispositivo.

 [accountStore requestAccessToAccountsWithType: accountType withCompletionHandler: ^ (BOOL concesso, errore NSError *) if (granted)  ​​else NSLog (@ "L'utente non ci autorizza ad accedere ai suoi account Twitter."); ];

Con il nostro account store e il tipo di account impostato, chiediamo all'utente di fornirci l'accesso ai propri account Twitter chiamando requestAccessToAccountsWithType: withCompletionHandler: sull'istanza del nostro account store. Passiamo due parametri, (1) l'istanza del tipo di account e (2) un altro blocco. Perché dobbiamo passare un blocco? Quando viene chiamato questo metodo, il dispositivo presenta all'utente una vista di avviso che informa l'utente che la nostra applicazione richiede l'accesso agli account Twitter del dispositivo. Il gestore di blocco o completamento viene eseguito quando l'utente concede o nega l'accesso dell'applicazione. Il blocco accetta due parametri, (1) un valore booleano che indica se l'accesso è stato concesso e (2) un oggetto errore che ci dice cosa è andato storto se qualcosa è andato storto.

Anche se il gestore di completamento sembra semplice e molto simile a come abbiamo configurato e gestito la richiesta di Twitter non autenticata in precedenza, ci sono alcune importanti differenze. Se l'utente ci ha concesso l'autorizzazione per i suoi account Twitter, chiediamo all'archivio account di tutti gli account Twitter installati sul dispositivo.

 NSArray * account = [accountStore accountWithAccountType: accountType];

Se uno o più account sono stati restituiti, prendiamo un riferimento al primo account nell'array. Ovviamente, in un'applicazione reale, questo non è l'approccio migliore in quanto vorresti assicurarti di ottenere un account specifico. Per la nostra applicazione, non importa. Tutto ciò che resta da fare è creare la richiesta di Twitter e inviarla all'API di Twitter. La principale differenza con la richiesta non autenticata è che impostiamo la proprietà dell'account della richiesta Twitter sull'account che abbiamo ricevuto dall'archivio account. Questo indica la richiesta (e Twitter per quella questione) per conto della quale viene fatta la richiesta, in altre parole, di chi sono le richieste che richiediamo. La gestione della risposta è identica a come abbiamo gestito la risposta per la richiesta non autenticata.

 if (account.count) ACAccount * twitterAccount = [account objectAtIndex: 0]; [self.tableView setHidden: YES]; [self.activityIndicatorView startAnimating]; NSURL * url = [NSURL URLWithString: @ "http://api.twitter.com/1/statuses/mentions.json"]; NSMutableDictionary * parameters = [[NSMutableDictionary alloc] init]; [parametri setObject: @ "20" forKey: @ "count"]; [parameters setObject: @ "1" forKey: @ "include_entities"]; TWRequest * request = [[TWRequest alloc] initWithURL: parametri url: parameters requestMethod: TWRequestMethodGET]; [request setAccount: twitterAccount]; [request performRequestWithHandler: ^ (NSData * responseData, NSHTTPURLResponse * urlResponse, NSError * error) if (responseData) NSError * error = nil; self.dataSource = [NSJSONSerialization JSONObjectWithData: responseData options: NSJSONReadingMutableLeaves error: & error]; if (self.dataSource) [self.tableView reloadData]; [self.tableView setHidden: NO]; [self.activityIndicatorView stopAnimating];  else NSLog (@ "Errore% @ con informazioni utente% @.", errore, error.userInfo); ]; 

Non dimenticare di dare un'occhiata alla completa implementazione del nostro requestMentions: metodo di seguito. Crea ed esegui la tua applicazione e tocca la voce del pulsante della barra destra per richiedere le citazioni del tuo account Twitter.

 - (IBAction) requestMentions: (id) sender [self.tableView setHidden: YES]; [self.activityIndicatorView startAnimating]; ACAccountStore * accountStore = [[ACAccountStore alloc] init]; ACAccountType * accountType = [accountStore accountTypeWithAccountTypeIdentifier: ACAccountTypeIdentifierTwitter]; [accountStore requestAccessToAccountsWithType: accountType withCompletionHandler: ^ (BOOL concesso, errore NSError *) if (concesso) account NSArray * = [accountStore accountWithAccountType: accountType]; if (account.count) ACAccount * twitterAccount = [account objectAtIndex: 0]; NSURL * url = [NSURL URLWithString: @ "http://api.twitter.com/1/statuses/mentions.json"]; NSMutableDictionary * parameters = [[NSMutableDictionary alloc] init]; [parametri setObject: @ "20" forKey: @ "count"]; [parameters setObject: @ "1" forKey: @ "include_entities"]; TWRequest * request = [[TWRequest alloc] initWithURL: parametri url: parameters requestMethod: TWRequestMethodGET]; [request setAccount: twitterAccount]; [request performRequestWithHandler: ^ (NSData * responseData, NSHTTPURLResponse * urlResponse, NSError * error) if (responseData) NSError * error = nil; self.dataSource = [NSJSONSerialization JSONObjectWithData: responseData options: NSJSONReadingMutableLeaves error: & error]; if (self.dataSource) [self.tableView reloadData]; [self.tableView setHidden: NO]; [self.activityIndicatorView stopAnimating];  else NSLog (@ "Errore% @ con informazioni utente% @.", errore, error.userInfo); ];  else NSLog (@ "L'utente non ci autorizza ad accedere ai suoi account Twitter."); ]; 

Conclusione

Questo non era il tutorial più breve, ma ora dovresti avere una buona conoscenza di come puoi sfruttare il framework di Twitter nelle tue applicazioni. Grazie all'integrazione di Twitter nel sistema operativo da iOS 5, è incredibilmente facile e immediato parlare con l'API di Twitter.

Se si desidera solo consentire all'utente di inviare un tweet di tanto in tanto, le cose sono ancora più semplici. TWTweetComposeViewController fornisce tutta l'infrastruttura necessaria per gestire elegantemente quel lavoro.