Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
Разработка под 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(
                                                         NSDocumentsDirectory,
                                                         NSUserDomainMask, YES)
                  lastObject];




                    Папка Caches (для хранения
                              кеша)
NSString *path = [NSSearchPathForDirectoriesInDomains(
                                                         NSCachesDirectory,
                                                         NSUserDomainMask, YES)
                  lastObject];
Работа с сетью
http://site.ru/app/request.php?cmd=get_news



                 Запрос



                    Ответ
GET
http://site.ru/request.php?param1=test&param2=123

          POST
http://site.ru/request.php
                             Тело запроса:
                  <request query="load-courses">
                     <courses query="create">
                         <course id="100"/>	

                         <course id="312"/>	

                     </courses >
                  < /request >
XML
        http://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>
JSON
http://ru.wikipedia.org/wiki/
            JSON
{
   "firstName": "Иван",
   "lastName": "Иванов",
   "address": {
       "streetAddress": "Московское ш.,
101, кв.101",
       "city": "Ленинград",
       "postalCode": 101101
   },
   "phoneNumbers": [
       "812 123-1234",
       "916 123-4567"
   ]
}
REST
         http://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 и т.д.)
• Сторонние сервисы
Parse   http://parse.com
Внутренняя база данных
SQLite
Встраиваемая база данных с поддержкой SQL-синтаксиса.




 • Работа напрямую через API на Си
 • Использование сторонних ORM на
    Objective-C
 • CoreData (ORM от Apple)
CoreData
(демонстрация)

More Related Content

Курсы по мобильной разработке под iOS. 5 лекция. Работа с данными

  • 1. Разработка под iOS Лекция 5 Работа с данными Глеб Тарасов
  • 9. 10 000 магазинов сразу после установки программы
  • 10. Файлы (загружаются из сети или поставляются вместе с приложением) • Данные загружаются из сети в память и нигде не сохраняются • Данные загружаются из сети, кешируются на какое-то время • Данные загружаются из сети, сохраняются в базу данных • База данных поставляется вместе с приложением
  • 12. 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;
  • 13. Папки Файл поставляется вместе с приложением NSString *path = [[NSBundle mainBundle] pathForResource:@"data" ofType:@"txt"]; Корневая папка bundle NSString *path = [[NSBundle mainBundle] bundlePath];
  • 14. Папки Папка Documents (для долгого хранения) NSString *path = [NSSearchPathForDirectoriesInDomains( NSDocumentsDirectory, NSUserDomainMask, YES) lastObject]; Папка Caches (для хранения кеша) NSString *path = [NSSearchPathForDirectoriesInDomains( NSCachesDirectory, NSUserDomainMask, YES) lastObject];
  • 17. GET http://site.ru/request.php?param1=test&param2=123 POST http://site.ru/request.php Тело запроса: <request query="load-courses"> <courses query="create"> <course id="100"/> <course id="312"/> </courses > < /request >
  • 18. XML http://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>
  • 19. JSON http://ru.wikipedia.org/wiki/ JSON { "firstName": "Иван", "lastName": "Иванов", "address": { "streetAddress": "Московское ш., 101, кв.101", "city": "Ленинград", "postalCode": 101101 }, "phoneNumbers": [ "812 123-1234", "916 123-4567" ] }
  • 20. REST http://ru.wikipedia.org/wiki/REST • Сервер не держит сессию с клиентом, не хранит состояние. • Каждый запрос от клиента содержит всю нужную информацию для ответа. • Запросы кешируемы •…
  • 21. Get-запрос NSURL *url = [NSURL URLWithString:@"http://site.ru/request.php?param=1"]; NSString *result = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
  • 22. 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];
  • 23. Серверная часть • Xостинг + скрипты на Python, PHP, Ruby. • Облако + скрипты (Google App Engine, Amazon EC, Microsoft Azure и т.д.) • Облачная NoSQL база без скриптов (Amazon SimpleDB, MongoDB и т.д.) • Сторонние сервисы
  • 24. Parse http://parse.com
  • 26. SQLite Встраиваемая база данных с поддержкой SQL-синтаксиса. • Работа напрямую через API на Си • Использование сторонних ORM на Objective-C • CoreData (ORM от Apple)