Показване на хронологията на Twitter

хронологията

Задачата за получаване на емисия с публикации от Twitter е разделена на изтегляне на данни от сървъра, обработката им и показването им. Форматът JSON беше използван като източник на запис. Ще демонстрирам как се работи с JSON, използвайки една от съществуващите библиотеки като пример, както и как да получите данни от отдалечени сървъри, използвайки синхронни и асинхронни заявки.

Има няколко безплатни библиотеки за работа с JSON на iOS устройства. От най-известните си струва да се отбележиJSON Framework (това е библиотеката, която използвах в процеса на писане на статията) иTouchJSON. Тези библиотеки са готови за използване в iOS проекти. Можете също да използвате други библиотеки (например олекотениcJSON ), като напишете "обвивки" за тях в Objective-C (такива обвивки се наричат ​​обвивка на английски).

където USERNAME е името на потребителя, регистриран в Twitter. Ако такъв потребител не съществува, ще бъде върнат JSON отговор, съдържащ описание на грешката.

Синхронно изтегляне на данни

Когато използваме синхронни заявки, изпращаме заявка до сървъра и чакаме отговор от него. В този случай изпълнението на нишката, от която е изпратена заявката, се спира, докато не пристигне отговор. След като сървърът отговори и получим необходимите за работа данни, потокът продължава.

Забележка: За по-голяма яснота се опитах да избегна автоматично освобождаване на обекти, където е възможно.

Синхронна заявка за получаване на Twitter емисия на потребител се изпраща, както следва:

В резултат на изпълнението на този метод отговорът от сървъра ще бъде записан в обекта responseData. обекти за отговор (инстанция NSURLResponse) игрешка (екземпляр на NSError) ще съдържа съответно данните за отговор (например кодирането на върнатите данни или типа MIME) и грешката, ако има такава, възникнала по време на изпълнението на заявката.

След като получите необходимите данни под формата на NSData обект, можете да ги изпратите на JSON анализатора за анализ. Както споменах в началото на статията, използвах библиотеката JSON Framework. Данните, получени от сървъра, са преобразувани в NSString, тъй като анализаторът, когато анализира низа, може също да върне описание на грешката, ако възникне.

Асинхронно зареждане на данни

Този метод на зареждане е по-предпочитан, тъй като процесът на получаване на данни от отдалечен сървър се извършва в отделна нишка и предоставя повече възможности за контрол на този процес. Създаването на връзка за асинхронна заявка става по следния начин:

ПараметърътstartImmediately:YES указва на връзката, че изтеглянето може да започне веднага. Ако му подадете стойносттаNO, тогава заявката ще трябва да бъде изпратена ръчно:

Обектът делегат, предаден в параметъра делегат, съдържа следните методи, които ще бъдат извикани по време на операцията за свързване.

Този метод ще бъде извикан, ако връзката бъде прекратена поради грешка. От него можете да извикате обекта, който чака данни, и например да покажете съобщение за грешка на екрана.

Този метод се извиква след установяване на връзка. От обекта за отговор можете да получите различни данни за отговора от сървъра. Например стойността на свойствотоexpectedContentLength може да се използва за визуализиране на напредъка на зареждането.

Асинхронните заявки получават данни на партиди и този метод ще бъде извикан, когато бъде получена следващата партида. Така че преди да стартирате заявкатанеобходимо е да се създаде екземпляр на обектаNSMutableData, в който ще се добавят получените части от данни.

Този метод се извиква при зареждане на данните. Тук можете да обработите получените данни, да освободите ненужни обекти и да прехвърлите контрола на обекта, който очаква тези данни (в нашия случай това е таблицата, в която се показват туитове).

Демонстрационният проект за тази статия показва туитове от емисията на Артур Малосиев:

twitter

Проектът използва макроса TRACE, за да замени NSLog. Това беше направено, за да се деактивира извеждането на информация за отстраняване на грешки при изграждане на целта за издание. Макросът изглежда така:

За да работи този макрос и изходът на NSLog да бъде деактивиран при изграждането на целта Release, трябва да направите следното в настройките на проекта. —отидете на раздела Build —изберете Debug от падащия списък Configuration —в лентата за търсене въведете текста cflags —в елемента Other C Flags въведете следния параметър: -DDEBUG

данни

Тази опция ще каже на компилатора, че при изграждането на целта за отстраняване на грешки, променливата DEBUG ще бъде дефинирана и всички срещания на TRACE ще бъдат заменени с NSLog. При изграждането на целта Release всички срещания на TRACE ще бъдат отхвърлени и няма да се генерира изход за отстраняване на грешки.

Изходният код за библиотеката JSON Framework се разпространява при условията на BSD лиценза и е достъпен в github.

(Няма гласове)