Курсы по мобильной разработке под ios. 5 лекция. Работа с...
DESCRIPTION
TRANSCRIPT
Разработка под iOS
Лекция 5
Работа с данными
Глеб Тарасов
Варианты хранения данных?
Яндекс.Карты
Аудиокнига
Аудиокнига с возможностью покупки
Новости
Новости с возможностью оффлайн чтения
Лекции и тесты
10 000 магазиновсразу после установки программы
• Файлы (загружаются из сети или поставляются вместе с приложением)
• Данные загружаются из сети в память и нигде не сохраняются
• Данные загружаются из сети, кешируются на какое-то время
• Данные загружаются из сети, сохраняются в базу данных
• База данных поставляется вместе с приложением
Работа с файлами
NSFileManager - удалять, копировать файлы и т.д.- (BOOL)removeItemAtPath:(NSString *)path
error:(NSError **)error;
- (BOOL)fileExistsAtPath:(NSString *)path;
NSData - бинарные данные
- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile;
NSString - текстовые данные
+ (id)stringWithContentsOfFile:(NSString *)path encoding:(NSStringEncoding)enc error:(NSError **)error;
Папки
Файл поставляется вместе с приложением
NSString *path = [[NSBundle mainBundle] pathForResource:@"data" ofType:@"txt"];
Корневая папка bundle
NSString *path = [[NSBundle mainBundle] bundlePath];
ПапкиПапка Documents (для долгого хранения)
NSString *path = [NSSearchPathForDirectoriesInDomains( NSCachesDirectory, NSUserDomainMask, YES) lastObject];
Папка Caches (для хранения кеша)
NSString *path = [NSSearchPathForDirectoriesInDomains( NSDocumentsDirectory, NSUserDomainMask, YES) lastObject];
Работа с сетью
Запрос
Ответ
http://site.ru/app/request.php?cmd=get_news
GET
POST
http://site.ru/request.php?param1=test¶m2=123
http://site.ru/request.phpТело запроса:
<request query="load-courses"><courses query="create">
<course id="100"/> <course id="312"/>
</courses >< /request >
XMLhttp://ru.wikipedia.org/wiki/XML
<?xml version="1.0" encoding="UTF-8"?><recipe name="хлеб" preptime="5" cooktime="180"> <title>Простой хлеб</title> <ingredient amount="3" unit="стакан">Мука</ingredient> <ingredient amount="0.25" unit="грамм">Дрожжи</ingredient> <ingredient amount="1.5" unit="стакан">Тёплая вода</ingredient> <ingredient amount="1" unit="чайная ложка">Соль</ingredient> <instructions> <step>Смешать все ингредиенты и тщательно замесить.</step> <step>Закрыть тканью и оставить на один час в тёплом помещении.</step> <!-- <step>Почитать вчерашнюю газету.</step> - это сомнительный шаг... --> <step>Замесить ещё раз, положить на противень и поставить в духовку.</step> </instructions></recipe>
JSONhttp://ru.wikipedia.org/wiki/
JSON{ "firstName": "Иван", "lastName": "Иванов", "address": { "streetAddress": "Московское ш., 101, кв.101", "city": "Ленинград", "postalCode": 101101 }, "phoneNumbers": [ "812 123-1234", "916 123-4567" ]}
RESThttp://ru.wikipedia.org/wiki/REST
• Сервер не держит сессию с клиентом, не хранит состояние.
• Каждый запрос от клиента содержит всю нужную информацию для ответа.
• Запросы кешируемы
• …
Get-запрос
NSURL *url = [NSURL URLWithString:@"http://site.ru/request.php?param=1"];
NSString *result = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
POST-запросNSURL *url = [NSURL URLWithString:@"http://site.ru/request.php"];NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
request.HTTPMethod = @"POST";NSString *request = @"текст запроса";request.HTTPBody = [request dataUsingEncoding:NSUTF8StringEncoding];
NSData *resultData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSString *resultString = [[NSString alloc] initWithData:resultData encoding:NSUTF8StringEncoding];
Серверная часть
• Xостинг + скрипты на Python, PHP, Ruby.
• Облако + скрипты (Google App Engine, Amazon EC, Microsoft Azure и т.д.)
• Облачная NoSQL база без скриптов (Amazon SimpleDB, MongoDB и т.д.)
• Сторонние сервисы
Внутренняя база данных
SQLite
• Работа напрямую через API на Си
• Использование сторонних ORM на Objective-C
• CoreData (ORM от Apple)
Встраиваемая база данных с поддержкой SQL-синтаксиса.
CoreData(демонстрация)