iOS 5 și framework-ul Twitter tehnici avansate

În prima parte a acestui tutorial în două părți despre cadrul Twitter, am vorbit TWTweetComposeViewController. Te-am arătat cum să folosești această clasă pentru a compune și a trimite tweets cu foarte puțin efort din partea ta. În acest tutorial, vorbesc despre cei mai avansați TWRequest clasă. Cu această clasă, puteți vorbi direct cu API-ul Twitter și acest lucru vă oferă mult mai mult control și flexibilitate!

Acest tutorial va discuta, de asemenea, beneficiile utilizării TWRequest în loc să creați și să executați propria dvs. solicitare HTTP și de ce sunteți încurajați să utilizați TWRequest dacă vă decideți să interacționați cu API-ul Twitter pe iOS 5.


Sumarul proiectului

În primul tutorial, v-am arătat cum să adăugați cadrul Twitter pentru proiectul dvs. și cum să îl utilizați TWTweetComposeViewController clasa pentru a compune și a trimite tweets. În acest articol, ne vom mișca puțin mai repede, deoarece aș vrea să acopăr destul de puțin.


Înainte de a începe

Înainte de a începe, vreau să repet că este necesar să aveți unul sau mai multe conturi Twitter instalate pe dispozitivul pe care îl veți folosi pentru acest tutorial. De asemenea, puteți utiliza Simulatorul iOS dacă nu aveți un dispozitiv fizic de testat. TWRequest clasa are grijă de autentificare cerând sistemului de operare dacă poate accesa conturile Twitter instalate pe dispozitivul utilizatorului. Pentru a finaliza acest tutorial, asigurați-vă că aveți cel puțin un cont Twitter instalat pe dispozitiv sau pe simulatorul iOS. Puteți verifica acest lucru deschizând Setări aplicării și alegerii Stare de nervozitate din listă. Aruncați o privire la prima tranșă a seriei din două părți pentru mai multe informații.


Pasul 1: Configurarea proiectului

Pentru a vă arăta cât de ușor este de a ajunge la viteză cu cadrul Twitter și API-ul Twitter, vom construi o aplicație de la bază. Bineînțeles, nu vom construi un client Twitter, dar veți fi surprinși de cât de ușor este să vă ridicați și să rulați cu foarte puțin timp și efort. Acest lucru este datorat integrării strânse a Twitter-ului cu iOS.

Creați un nou proiect Xcode selectând Vizualizare individuală șablon din lista de șabloane. Denumiți aplicația Twitter Rocks, introduceți un identificator al companiei, setați iPhone pentru familia de dispozitive și verificați Utilizați numărarea automată a referințelor. Puteți lăsa casetele rămase neschimbate pentru acest proiect. Spuneți Xcode unde doriți să salvați proiectul și să îl loviți Crea.


Pasul 2: Configurarea interfeței utilizator

Înainte de a începe să lucrăm cu TWRequest clasa, vreau mai întâi să am grija de interfața cu utilizatorul. Pentru acest tutorial, vom folosi o vizualizare de tabel pentru a afișa datele pe care le primim din Twitter, adică tweet-uri. Selectați fișierul antet al controlerului de vizualizare și creați două ieșiri, unul pentru vizualizarea tabelului și altul pentru o instanță de UIActivityIndicatorView. Vizualizarea indicatorului de activitate va fi vizibilă în timp ce așteptăm ca cererea noastră să returneze un răspuns. De asemenea, declarăm o variabilă de instanță numită sursă de date care va păstra rezultatele (tweets) ale cererii noastre. Acesta va servi drept sursa de date a tabelului nostru. Un exemplu de NSArray este perfect pentru nevoile noastre. Asigurați-vă că controlerul dvs. de vizualizare este conform cu sursa de date din tabelul de vizualizare și cu protocoalele delegate.

Înainte de a crea interfața cu utilizatorul, trebuie să adăugăm două acțiuni și în fișierul antetului nostru de vizualizare. Prima acțiune requestTimeline: inițiază solicitarea care aduc cronologia publică a contului Mobiletuts + Twitter. A doua acțiune, requestMentions:, inițiază solicitarea care preia mențiunile contului Twitter instalat pe dispozitiv. Nu vă faceți griji cu privire la aceste acțiuni încă. Voi explica totul mai detaliat odată ce vom începe să le punem în aplicare.

Nu uitați să sintetizați accesoriile pentru punctele noastre de acces în fișierul de implementare a controlerului nostru și adăugați o implementare goală pentru fiecare acțiune pentru a preveni orice avertismente de compilator.

 #import  @ interfață ViewController: UIViewController  __weak UITableView * _tableView; __weak UIActivityIndicatorView * _activityIndicatorView; NSArray * _dataSource;  @property (nonatomic, slab) IBOutlet UITableView * tableView; @property (nonatomic, slab) IBOutlet UIActivityIndicatorView * activityIndicatorView; @property (nonatomic, puternic) NSArray * dataSource; - (IBAction) requestTimeline: (id) expeditor; - (IBAction) cerereMenții: (id) expeditor; @Sfârșit
 @synthesize tableView = _tableView, activityIndicatorView = _activityIndicatorView; @synthesize dataSource = _dataSource;
 - (IBAction) requestTimeline: (id) expeditor  - (IBAction) requestMenții: (id) expeditor 

Se îndreaptă spre fișierul XIB al controlerului vizual și începe prin tragerea unei bare de instrumente în partea inferioară a vederii controlerului de vizualizare. În mod prestabilit, bara de instrumente are un singur buton, așa că trageți o altă instanță din UIBarButtonItem la bara de instrumente. Păstrați-o organizată prin tragerea unei instanțe flexibile între cele două butoane pentru a împinge butoanele spre laturile opuse. Selectați butonul din stânga și, în Atribuții Inspector (a treia filă din dreapta), introduceți Cronologie în Titlu camp. Dați butonul drept un titlu menţionează. Trageți comanda de la elementul butonului din stânga barului la Proprietarul dosarului și selectați requestTimeLine: acțiune din meniul care apare. Faceți același lucru pentru elementul din butonul din dreapta, dar selectați requestMentions: acțiune din același meniu.

Interfața cu utilizatorul este aproape finalizată. Glisați o vizualizare a tabelului și indicatorul de activitate pentru vizualizarea vizualizatorului nostru. Poziționați afișarea indicatorului de activitate în centrul vizualizării controlerului de vizualizare și bifați caseta de selectare de lângă Ascunde când este oprit în Atribuții Inspector. Conectați ambele vederi la prizele pe care le-am declarat cu un minut în urmă prin controlul tragând de la Proprietarul dosarului la vizualizarea tabelului și la afișarea indicatorului de activitate. În cele din urmă, selectați vizualizarea tabelului, deschideți Conectarea inspectorului, și indicați sursă de date și delega ieșirile din vizualizarea tabelului la Proprietarul dosarului obiect.

Interfața cu utilizatorul? Terminat.


Pasul 3: Implementarea vizualizării tablelor

Trebuie să facem mai mult de lucru înainte de a începe să jucăm cu cadrul Twitter. În afară de punerea în aplicare a acțiunilor noastre, pe care le vom face într-un minut, trebuie să ne asigurăm că sunt implementate metodele necesare ale protocolului sursă de date pentru tabele. Chiar dacă ne-am atribuit controlorul de vizualizare ca delegat al tabelului, nu vom implementa niciuna dintre metodele delegatelor din tabel în acest tutorial. Prima metodă pe care o vom implementa este numberOfSectionsInTableView:. Implementarea este simplă. Ne asigurăm că sursa de date este setată și returnați 1 dacă este sau 0 dacă nu este. Uşor. Dreapta?

 - (NSInteger) numberOfSectionsInTableView: (UITableView *) tableView if (auto.dataSource) retur 1;  altceva return 0; 

A doua metodă sursă de date este aproape identică. În tableView: numberOfRowsInSection:, verificăm dacă sursa de date este setată și dacă returnează numărul de elemente din sursa de date. Dacă sursa de date nu este setată, vom returna 0.

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

În tableView: cellForRowAtIndexPath:, declarăm un identificator static de refolosire (pentru reutilizarea celulelor din tabel vizual) și cerem vizualizarea tabelului pentru o celulă pe care o putem reutiliza. Dacă vizualizarea de tabelă nu returnează o celulă reutilizabilă, inițializăm o nouă celulă. Nu vom configura încă celula. Trebuie să știm mai întâi cum arată datele de pe Twitter.

 - (UITableViewCell *) tableView: (UITableView *) aTableView cellForRowAtIndexPath: (NSIndexPath *) indexPath NSString static * CellIdentifier = @ "Cell Identifier"; UITableViewCell * celula = [aTableView dequeueReusableCellWithIdentifier: CellIdentifier]; dacă (celula == zero) cell = [[UITableViewCell alin] initWithStyle: UITableViewCellStyleSubtitle reuseIdentifier: CellIdentifier];  // Pentru a continua celulă retur; 

Pasul 4: Adăugarea cadrului Twitter

Înainte de a putea începe să folosim cadrul Twitter, trebuie să conectăm proiectul cu acesta. Dacă vrem să facem și cereri autentificate, trebuie să conectăm proiectul nostru și la cadrul Conturi. Să facem asta acum.

Selectați proiectul în Project Navigator și selectați țintă din lista de destinații. Alege Construiți faze în partea de sus, deschideți Link binar cu biblioteci sertar și adăugați cadrele Twitter și Conturi la proiect.

Dacă ați citit prima parte a acestui tutorial, este posibil să rețineți că trebuie de asemenea să importați anteturile cadru în fișierul de antet al controlorului nostru de vizualizare pentru a putea utiliza aceste cadre în controlerul nostru de vizualizare. Introduceți-le imediat după declarația de import UIKit.

 #import  #import  #import 

Pasul 5: Pământul în Twitter

Există două lucruri pe care vreau să le arăt: (1) cum să trimiteți tweets neautentificate și (2) cum să trimiteți cereri autentificate către API-ul Twitter. Diferența este evidentă, dar există o diferență importantă în ceea ce privește experiența utilizatorului. Dacă o aplicație iOS dorește să trimită o cerere autentificată la API-ul Twitter, utilizatorul trebuie să dea în mod explicit permisiunea aplicației pentru a accesa conturile Twitter instalate pe dispozitiv. Cu alte cuvinte, autentificarea este făcută pentru dvs. atunci când utilizați cadrul Twitter, dar utilizatorul rămâne în control în ceea ce privește acordarea sau refuzarea accesului la contul sau conturile Twitter,.


Pasul 6: Solicitări neautorizate de Twitter

Pentru a ilustra modul în care funcționează cererile de autentificare neautorizate, vom solicita cronologia contului Mobiletuts + Twitter. Magia se va întâmpla în noi requestTimeline: metodă. Ca întotdeauna, vă voi trece prin implementarea pas cu pas. Înainte de a trimite cererea noastră la Twitter, ascundem tabelul nostru și afișăm vizualizarea indicatorului de activitate prin trimiterea lui a startAnimating mesaj. Apoi, vom crea adresa URL pentru cererea noastră Twitter. Nu voi vorbi despre specificul API-ului Twitter în acest tutorial, deoarece vreau să mă concentrez asupra aspectului iOS al interogării API-ului. Pentru mai multe informații despre API-ul Twitter, vizitați documentația.

Al nostru TWRequest exemplu, pe care o vom crea în scurt timp, acceptă un dicționar de parametri. Acești parametri vă permit să ajustați cererea dvs. În exemplul nostru, specificăm ce cronologie dorim să vedem, câte tweeturi vrem să preluăm și setăm și steagul pentru include_entities la 1. Entitățile sunt incredibil de utile. În loc să primească doar textul unui tweet, entitățile reprezintă părțile interesante ale unui tweet, cum ar fi imaginile, adresele URL sau mențiunile altor utilizatori Twitter din tweet.

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

Este timpul să ne creăm TWRequest instanță. Am inițializat-o cu (1) adresa URL, (2) dicționarul nostru de parametri și (3) o metodă de solicitareTWRequestMethod). Ultimul este verbul HTTP. În cazul nostru, folosim TWRequestMethodGET, care corespunde unei solicitări GET. Celelalte opțiuni sunt TWRequestMethodPOST și TWRequestMethodDELETE.

 TWRequest * request = [Alocare TWRequest] initWithURL: parametrii url: parametrii requestMethod: TWRequestMethodGET];

Acum putem face cererea noastră prin apelare performRequestWithHandler: pe instanța noastră de cerere. Îmi place blocurile și această metodă, la fel ca multe metode iOS 5, ia un bloc (TWRequestHandler) ca singurul său parametru. Blocul este executat imediat ce primim răspunsul pe care îl trimite API-ul Twitter. Blocul are trei parametri: (1) datele de răspuns prime, (2) răspunsul HTTP al cererii noastre și (3) o eroare în cazul în care ceva nu merge bine.

Înainte de a arunca o privire la managerul de solicitare în sine, este important să știm că ne așteptăm la un răspuns JSON (aruncăm o privire la ultima componentă a adresei URL a solicitării noastre). Cu toate acestea, solicitantul de solicitare ne dă o instanță NSData. Aceasta înseamnă că mai întâi trebuie să serializăm acest obiect de date folosind NSJSONSerialization, care ne va da o matrice care conține tweets pe care le-am cerut.

În solicitantul de solicitare, verificăm mai întâi dacă obiectul de date de răspuns nu este zero. În acest caz, vom serializa obiectul de date de răspuns și vom atribui valoarea returnată obiectului sursă de date. Este întotdeauna important să verificați erorile atunci când faceți cereri la un serviciu web, deoarece nu știți niciodată ce veți obține înapoi. În exemplul nostru, verificăm dacă obiectul nostru de sursă de date nu este zero. În acest caz, reîncărcați și afișați vizualizarea tabelului și ascundeți afișarea indicatorului de activitate trimițând-o stopAnimating mesaj. Dacă cererea noastră nu a revenit la ceea ce ne-am așteptat, vom înregistra eroarea corespunzătoare în consola.

 [cereți performRequestWithHandler: ^ (NSData * răspunsData, NSHTTPURLResponse * urlResponse, eroare NSError *) if (răspunsData! = nil) NSError * error = nil; self.dataSource = [NSJSONSerializare JSONObjectWithData: răspuns Opțiuni de date: NSJSONReadingMutableLafe de eroare: & eroare]; dacă (auto.dataSource! = nil) [self.tableView reloadData]; [self.tableView setHidden: NO]; [self.activityIndicatorView stopAnimating];  altceva NSLog (@ "Eroare de serializare a datelor de răspuns% @ cu informația utilizatorului% @", eroare, error.userInfo);  altceva NSLog (@ "Eroare care solicită cronologie% @ cu informații despre utilizator% @", eroare, error.userInfo); ];

Dacă doriți să știți cum este structurat fiecare tweet, vă încurajez să conectați la consola obiectul de date de răspuns serializat. Nu voi intra în detaliu, deoarece vreau să țin accentul acestui tutorial asupra dezvoltării iOS. Înainte de a putea afișa ceva în tabelul nostru, trebuie să ne finalizăm tableView: cellForRowAtIndexPath: metodă. Configurarea celulei este simplă și nu este atât de simplă. Uitați-vă la implementarea completă de mai jos.

 - (UITableViewCell *) tableView: (UITableView *) aTableView cellForRowAtIndexPath: (NSIndexPath *) indexPath NSString static * CellIdentifier = @ "Cell Identifier"; UITableViewCell * celula = [aTableView dequeueReusableCellWithIdentifier: CellIdentifier]; dacă (celula == zero) cell = [[UITableViewCell alin] initWithStyle: UITableViewCellStyleSubtitle reuseIdentifier: CellIdentifier];  NSDictionary * tweet = [auto.dataSource objectAtIndex: indexPath.row]; cell.textLabel.text = [tweet objectForKey: @ "text"]; cell.imageView.image = [UIImage imageNamed: @ "substituent"]; dispatch_queue_t queue = dispatch_queue_create ("com.mobiletuts.task", NULL); dispatch_queue_t principal = dispatch_get_main_queue (); discurs_async (coadă, ^ NSURL * imageURL = [NSURL URLWithString: [[tweet objectForKey: @ "user"] objectForKey: @ "profile_image_url" cel.imageView.image = [UIImage imageWithData: imageData];);); dispatch_release (coadă); celule retur; 

Mai întâi, preluăm tweet-ul corect din matricea surselor de date. Fiecare tweet este un exemplu de NSDictionary. În eticheta textului celulei noastre, afișăm tweet-ul însuși prin obținerea valorii pentru cheie text. Desigur, o aplicație Twitter nu ar fi completă fără imagini. Fiecare tweet ne dă adresa URL a imaginii de profil a persoanei care a trimis mesajul tweeted. Dacă ați citit oricare dintre tutorialele mele anterioare, ați putea avea o idee despre ceea ce urmează să spun în continuare. Dacă am fi solicitat imaginea de profil pentru fiecare tweet pe firul principal, performanța vizualizării noastre de masă ar fi teribilă. Firele noastre principale ar fi blocate de fiecare dată când a fost făcută o solicitare, iar defilarea ar fi orice altceva decât netedă. Îmi place buna, așa că trebuie să rezolvăm asta.

O posibilă soluție este de a utiliza Grand Central Dispatch sau GCD. Nu voi intra în detaliile GCD în acest tutorial, dar ideea este simplă. Facem cererea pentru fiecare imagine de profil pe un fir separat. După ce am primit datele, vom crea a UIImage din date și setați imaginea ecranului de imagine a celulei cu imaginea respectivă. Este vital ca aceasta din urmă să se facă pe firul principal din mai multe motive. Nu vă faceți griji dacă nu înțelegeți pe deplin ce se întâmplă, deoarece nu este punctul central al acestui tutorial.

Alternativ, ați putea folosi o bibliotecă cum ar fi AFNetworking pentru a elimina detaliile ciudate. Uită-te la unul dintre tutorialele mele anterioare pentru mai multe informații despre AFNetworking bibliotecă.

Rețineți că, înainte de a solicita imaginea de profil, am setat imaginea de vizualizare a imaginii celulei cu o imagine cu destinație restricționată. Acest lucru este necesar pentru a împiedica apariția unor ciudățenii vizuale.

Construiți și executați aplicația. Atingeți butonul temporal din stânga jos pentru a prelua tweeturile pentru cronologia publică a contului Mobile Tuts + Twitter. Nu ți-am spus că îmi plac viziunile mesei de defilare? După cum puteți vedea, în prezent nu există nicio formă de cache. Cu alte cuvinte, imaginea de profil a contului Mobiletuts + Twitter este extrasă de mai multe ori inutil. Simțiți-vă liber să remediați această problemă cu propria soluție personalizată de cache.


Pasul 7: Solicitări Twitter autentificate

Autentificările Twitter autentice sunt foarte asemănătoare cu cererile neautorizate. Trebuie doar să facem un pic de muncă suplimentară pentru a efectua o cerere autentificată Twitter. Să aruncăm o privire asupra implementării noastre requestMentions: metoda pas-cu-pas.

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

În primul rând, ascundem vizualizarea tabelului și afișăm vizualizarea indicatorului nostru de activitate, trimițându-i un mesaj startAnimating. Apoi inițializăm un depozit de cont (ACAccountStore). Acest obiect ne va permite să accesăm conturile Twitter instalate pe dispozitiv. Apoi, vom crea un exemplu de ACAccountType sunând accountTypeWithAccountTypeIdentifier: pe instanța magazinului nostru de cont. Această metodă acceptă un parametru, adică tipul de cont la care vrem să obținem acces. În exemplul nostru, dorim să accesăm conturile Twitter de pe dispozitiv.

 [contStore requestAccessToAccountsWithType: accountType withCompletionHandler: ^ (Boole acordat, eroare NSError *) if (acordat)  altul NSLog (@ "Utilizatorul nu ne acordă permisiunea de a accesa contul (urile) Twitter"; ];

Cu setarea contului nostru de cont și a tipului de cont, solicităm utilizatorului să ne dea acces la contul (conturile) de pe Twitter apelând requestAccessToAccountsWithType: withCompletionHandler: pe instanța magazinului nostru de cont. Transmitem doi parametri, (1) instanța tipului de cont și (2) un alt bloc. De ce trebuie să trecem un bloc? Când această metodă este apelată, dispozitivul prezintă utilizatorului o vizualizare de alertă care informează utilizatorul că cererea noastră solicită accesul la conturile Twitter ale dispozitivului. Blocul sau dispozitivul de completare este executat atunci când utilizatorul acordă sau refuză accesul aplicației. Blocul acceptă doi parametri, (1) o valoare booleană care indică dacă accesul a fost acordat și (2) un obiect de eroare care ne spune ce sa întâmplat dacă ceva nu merge bine.

Chiar dacă instrumentul de completare arată simplu și foarte asemănător cu modul în care am creat și tratat mai devreme cererea Twitter neauthenticată, există câteva diferențe importante. Dacă utilizatorul ne-a acordat permisiunea pentru contul (urile) Twitter, solicităm stocarea contului pentru toate conturile Twitter instalate pe dispozitiv.

 NSArray * conturi = [conturiStore conturiWithAccountType: accountType];

Dacă s-au returnat unul sau mai multe conturi, luăm o referință la primul cont din matrice. Desigur, într-o aplicație reală, aceasta nu este cea mai bună abordare, așa cum ați dori să vă asigurați că aveți un cont specific. Pentru aplicația noastră, nu contează. Tot ce trebuie să faceți este să creați cererea Twitter și să o trimiteți la API-ul Twitter. Principala diferență cu cererea neautorizată este aceea de a seta proprietatea contului solicitării Twitter la contul pe care l-am primit de la magazinul de cont. Acest lucru spune cererea (și Twitter, în acest sens) în numele căruia se face cererea, cu alte cuvinte, ale căror mențiuni le cerem. Manipularea răspunsului este identică cu modul în care am tratat răspunsul pentru solicitarea neauthenticată.

 dacă (accounts.count) ACAccount * twitterAccount = [conturi objectAtIndex: 0]; [self.tableView setHidden: YES]; [self.activityIndicatorView startAnimating]; NSURL * url = [NSURL URLWithString: @ "http://api.twitter.com/1/statuses/mentions.json"]; NSMutableDictionary * parametrii = [[NSMutableDictionary alloc] init]; [parametrii setObject: @ "20" pentruKey: @ "count"); [parametri setObject: @ "1" pentruKey: @ "include_entities"]; TWRequest * request = [Alocare TWRequest] initWithURL: parametrii url: parametrii requestMethod: TWRequestMethodGET]; [cerere setAccount: twitterAccount]; [cereți performRequestWithHandler: ^ (NSData * răspunsData, NSHTTPURLResponse * urlResponse, eroare NSError *) if (răspunsData) NSError * error = nil; self.dataSource = [NSJSONSerializare JSONObjectWithData: răspuns Opțiuni de date: NSJSONReadingMutableLafe de eroare: & eroare]; dacă (auto.dataSource) [self.tableView reloadData]; [self.tableView setHidden: NO]; [self.activityIndicatorView stopAnimating];  altceva NSLog (@ "Eroare% @ cu informații despre utilizator% @", eroare, error.userInfo); ]; 

Nu uitați să aruncați o privire la implementarea completă a serviciilor noastre requestMentions: mai jos. Construiți și executați aplicația și atingeți elementul din butonul din dreapta pentru a solicita mențiunile contului dvs. Twitter.

 - (IBAction) requestMenții: (id) expeditor [self.tableView setHidden: YES]; [self.activityIndicatorView startAnimating]; ACAccountStore * contStore = [[ACAccountStore alocare] init]; ACAccountType * accountType = [contStore accountTypeWithAccountTypeIdentifier: ACAccountTypeIdentifierTwitter]; [accountStore requestAccessToAccountsWithType: accountType withCompletionHandler: ^ (BOOL acordat, eroare NSError *) if (acordat) NSArray * accounts = [contStore accountsWithAccountType: accountType]; dacă (accounts.count) ACAccount * twitterAccount = [conturi objectAtIndex: 0]; NSURL * url = [NSURL URLWithString: @ "http://api.twitter.com/1/statuses/mentions.json"]; NSMutableDictionary * parametrii = [[NSMutableDictionary alloc] init]; [parametrii setObject: @ "20" pentruKey: @ "count"); [parametri setObject: @ "1" pentruKey: @ "include_entities"]; TWRequest * request = [Alocare TWRequest] initWithURL: parametrii url: parametrii requestMethod: TWRequestMethodGET]; [cerere setAccount: twitterAccount]; [cereți performRequestWithHandler: ^ (NSData * răspunsData, NSHTTPURLResponse * urlResponse, eroare NSError *) if (răspunsData) NSError * error = nil; self.dataSource = [NSJSONSerializare JSONObjectWithData: răspuns Opțiuni de date: NSJSONReadingMutableLafe de eroare: & eroare]; dacă (auto.dataSource) [self.tableView reloadData]; [self.tableView setHidden: NO]; [self.activityIndicatorView stopAnimating];  altceva NSLog (@ "Eroare% @ cu informații despre utilizator% @", eroare, error.userInfo); ];  altceva NSLog (@ "Utilizatorul nu ne acordă permisiunea de a accesa contul (urile) Twitter."); ]; 

Concluzie

Acesta nu a fost cel mai scurt tutorial, dar acum ar trebui să înțelegeți bine modul în care puteți utiliza cadrul Twitter în propriile aplicații. Datorită integrării Twitter în sistemul de operare de la iOS 5, este uimitor de ușor și simplu să vorbim cu API-ul Twitter.

Dacă doriți doar să lăsați utilizatorul să trimită un tweet din timp în timp, lucrurile sunt chiar mai ușoare. TWTweetComposeViewController furnizează toată infrastructura necesară pentru a se descurca elegant.

Cod