SlideShare una empresa de Scribd logo
1 de 19
Descargar para leer sin conexión
squeek school

                          Разработка приложений для iOS




суббота, 21 мая 2011 г.
Хранение данных


             • Xml (plist)
             • SQLite



суббота, 21 мая 2011 г.
Хранение данных
                                                Property Lists

       •      Property Lists - для небольшого объема

       •         Writing an Array to Disk
              хранит обычные форматы данных iOS
                          NSArray *array = [NSArray arrayWithObjects:@“Foo”,
                                            [NSNumber numberWithBool:YES],
                                            [NSDate dateWithTimeIntervalSinceNow:60],
                                            nil];
                          [array writeToFile:@“MyArray.plist” atomically:YES];
                          NSArray * a = [NSArray arrayWithContentsOfFile:xmlFile];

                              <?xml version="1.0" encoding="UTF-8"?>
                              <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
                              "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
                              <plist version="1.0">
                              <array>
                               	    <string>Foo</string>
                               	    <true/>
                               	    <date>2010-02-02T09:26:18Z</date>
                              </array>
                              </plist>
суббота, 21 мая 2011 г.
Хранение данных
                                  в настройках




          [[NSUserDefaults standardUserDefaults] setObject: ForKey:];

                [[NSUserDefaults standardUserDefaults] objectForKey:];
                  [[NSUserDefaults standardUserDefaults] synchonize];




суббота, 21 мая 2011 г.
песочница




суббота, 21 мая 2011 г.
а что внутри?
                    Home Directory Layout
                    • Each app has its own set of directories
                                                  я!
                    • <Application Home> ельз
                              MyApp.app            ьн
                                                 ят
                          ■

                                               ен
                               ■ MyApp     -м
                               ■ MainWindow.nib

                               ■ SomeImage.png

                          ■ Documents - добавления здесь!
                          ■ Library

                               ■ Caches
                               ■ Preferences


                    • Applications only read and write within their home directory
                    • Backed up by iTunes during sync (mostly)
суббота, 21 мая 2011 г.
File Paths in Your Application
              File Paths in Your Application
               // Basic directories

                          путь к документам
                NSString *homePath = NSHomeDirectory();
                // Basic directories NSTemporaryDirectory();
                NSString *tmpPath =
                NSString *homePath = NSHomeDirectory();
                // Documents directory
                NSString *tmpPath = NSTemporaryDirectory();
                NSArray *paths = NSSearchPathForDirectoriesInDomains
                                  (NSDocumentDirectory, NSUserDomainMask, YES);
                // Documents directory
                NSArray *paths = NSSearchPathForDirectoriesInDomains
                NSString *documentsPath = [paths objectAtIndex:0];
                                 (NSDocumentDirectory, NSUserDomainMask, YES);
                NSString *documentsPath = [paths objectAtIndex:0];
                // <Application Home>/Documents/foo.plist
                NSString *fooPath =
                // <Application stringByAppendingPathComponent:@“foo.plist”];
                [documentsPath Home>/Documents/foo.plist
                NSString *fooPath =
                [documentsPath stringByAppendingPathComponent:@“foo.plist”];




   Tuesday, February 2, 2010                                                      1

   Tuesday, February 2, 2010                                                 16
суббота, 21 мая 2011 г.
SQLite!

                     • база в файле
                     • нет сервера
                     • простая реализация
                     • включена в iPhone

суббота, 21 мая 2011 г.
7 шагов
                     • находим файл базы
                     • подключаемся - sqlite3_open
                     • создаем запрос
                     • готовим, проверяем - sqlite3_prepare_v2
                     • выполняем - sqlite3_step
                     • завершаем - sqlite3_finalize
                     • закрываем - 	

 sqlite3_close
суббота, 21 мая 2011 г.
шаг 0 - создать БД
          $ sqlite3 ex1
          SQLite version 3.6.11
          Enter ".help" for instructions
          Enter SQL statements terminated with a ";"
          sqlite> create table tbl1(one varchar(10), two smallint);
          sqlite> insert into tbl1 values('hello!',10);
          sqlite> insert into tbl1 values('goodbye', 20);
          sqlite> select * from tbl1;
          hello!|10
          goodbye|20
          sqlite>
                                                      CREATE TABLE Person (
                                                       id integer unique not null,
                                                       first_name char(20),
                                                       last_name char(20),
                                                       address char(100),
                                                       email char(30),
                                                       telephone char(15),
                                                       birth_date int
                                                      );


суббота, 21 мая 2011 г.
подготовка
         #import <sqlite3.h>

   ! NSString *databaseName = @"Cocktails.sql";
   ! NSArray *documentPaths = NSSearchPathForDirectoriesInDomains
   (NSDocumentDirectory, NSUserDomainMask, YES);
   ! NSString *documentsDir = [documentPaths objectAtIndex:0];
   ! NSString *databasePath = [documentsDir
   stringByAppendingPathComponent:databaseName];
   ! BOOL success;

   ! NSFileManager *fileManager = [NSFileManager defaultManager];
   ! success = [fileManager fileExistsAtPath:databasePath];

   ! if(!success) {
      ! NSString *databasePathFromApp = [[[NSBundle mainBundle]
      resourcePath] stringByAppendingPathComponent:databaseName];
      ! [fileManager copyItemAtPath:databasePathFromApp
      toPath:databasePath error:nil];
      ! [fileManager release];
   ! }
   !
суббота, 21 мая 2011 г.
чтение
 sqlite3 *database;
 ! if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) {
 ! ! const char *sqlStatement = "select * from cocktail;";
 ! ! sqlite3_stmt *compiledStatement;

 ! ! if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement,
 NULL) == SQLITE_OK) {

 ! ! ! while(sqlite3_step(compiledStatement) == SQLITE_ROW) {
 ! ! ! ! int anId = sqlite3_column_int(compiledStatement, 0);
 ! ! ! ! NSString *aName = [NSString stringWithUTF8String:(char *)
 sqlite3_column_text(compiledStatement, 1)];
            //...
 ! ! ! }
 ! ! }
 ! ! sqlite3_finalize(compiledStatement);
 ! }
 ! sqlite3_close(database);




суббота, 21 мая 2011 г.
запись


                     • просто sqlite3_step(compiledStatement),
                          при удаче - SQLITE_DONE




суббота, 21 мая 2011 г.
Сетевая активность приложения


             • GET/POST запросы
             • NSURLRequest и NSURLConnection
             • Защищенное соединение
             • Парсинг xml
             • Работа с публичными API

суббота, 21 мая 2011 г.
Google
         Maps API          Facebook API


                          Яндекс Карты
                              API



       Twitter API          общение с
                          вашим сервером


суббота, 21 мая 2011 г.
xml
  <?xml version="1.0" encoding="UTF-8" ?>
  <painting>
   <img src="madonna.jpg" alt='Foligno Madonna, by
  Raphael'/>
   <caption>This is Raphael's "Foligno" Madonna, painted in
    <date>1511</date>–<date>1512</date>.
   </caption>
  </painting>



суббота, 21 мая 2011 г.
xml
        ! NSURL *xmlURL = [NSURL URLWithString:URL];
        ! NSXMLParser * rssParser = [[NSXMLParser alloc]
        initWithContentsOfURL:xmlURL];
        ! [rssParser setDelegate:self];
        ! [rssParser parse];

        NSXMLParserDelegate:
        - (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)
        parseError

        - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)
        elementName namespaceURI:(NSString *)namespaceURI qualifiedName:
        (NSString *)qName attributes:(NSDictionary *)attributeDict

        - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)
        elementName namespaceURI:(NSString *)namespaceURI qualifiedName:
        (NSString *)qName

        - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)
        string

        - (void)parserDidEndDocument:(NSXMLParser *)parser {

суббота, 21 мая 2011 г.
What does a JSON object look like?
                                            json
                  {
                       “instructor” : “Josh Shaffer”,
                       “students” : 60,
                       “itunes-u” : true,
                       “midterm-exam” : null,
                       “assignments” : [ “WhatATool”,
                                          “HelloPoly”,
                                          “Presence” ]
                  }



             • NSDictionary *result = [jsonString JSONValue];
y, February 2, 2010                                      41



 суббота, 21 мая 2011 г.
NSURLConnection
      NSString *strUrl = [NSString stringWithString:@"http://prognozempatika.appspot.com/
      prognoz?str=Hello, World!"];
      NSString *escapedString = [strUrl
      stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
      NSURL *url = [ NSURL URLWithString: @"http://www.yourwebsite.com/image.png" ];
      NSURLRequest *request = [ [ NSURLRequest alloc ] initWithURL: url
          cachePolicy: NSURLRequestReturnCacheDataElseLoad
          timeoutInterval: 60.0
      ];
      NSMutableData *data = [ [ NSMutableData data ] retain ];
      NSURLConnection * connection = [ [ NSURLConnection alloc ]
          initWithRequest: request delegate: self ];
      -(void)connection:(NSURLConnection *)connection didReceiveResponse:
          (NSURLResponse *)response
      {
          [ data setLength: 0 ];
      }

         -(void)connection:(NSURLConnection *)connection didReceiveData:
             (NSData *)incomingData
         {
             [ data appendData: incomingData ];
         }


                                         -(void)connectionDidFinishLoading:(NSURLConnection *)connection {
                                             NSLog(@"w00t! my image is finished loading!");
                                             NSString *string = [ [ NSString alloc ] initWithData: data encoding:NSUTF8StringEncoding ];
                                             [ data release ];
                                         }



суббота, 21 мая 2011 г.

Más contenido relacionado

La actualidad más candente

Scala and LiftWeb presentation (Russian)
Scala and LiftWeb presentation (Russian)Scala and LiftWeb presentation (Russian)
Scala and LiftWeb presentation (Russian)
Dmitry Stropalov
 
Drupal 7 и history.js или как ajax инфицировать сайт
Drupal 7 и history.js или как ajax инфицировать сайтDrupal 7 и history.js или как ajax инфицировать сайт
Drupal 7 и history.js или как ajax инфицировать сайт
DrupalCamp Kyiv Рысь
 

La actualidad más candente (7)

Scala and LiftWeb presentation (Russian)
Scala and LiftWeb presentation (Russian)Scala and LiftWeb presentation (Russian)
Scala and LiftWeb presentation (Russian)
 
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"
 
Drupal 7 and History.js
Drupal 7 and History.jsDrupal 7 and History.js
Drupal 7 and History.js
 
Drupal 7 и history.js или как ajax инфицировать сайт
Drupal 7 и history.js или как ajax инфицировать сайтDrupal 7 и history.js или как ajax инфицировать сайт
Drupal 7 и history.js или как ajax инфицировать сайт
 
Укрощение XML
Укрощение XMLУкрощение XML
Укрощение XML
 
Дмитрий Костюк - Очаровательные серые кнопки: обзор эволюции виджет-тулкитовH...
Дмитрий Костюк - Очаровательные серые кнопки: обзор эволюции виджет-тулкитовH...Дмитрий Костюк - Очаровательные серые кнопки: обзор эволюции виджет-тулкитовH...
Дмитрий Костюк - Очаровательные серые кнопки: обзор эволюции виджет-тулкитовH...
 
JavaScript-библиотека
JavaScript-библиотекаJavaScript-библиотека
JavaScript-библиотека
 

Similar a Squeek school #6

Курсы по мобильной разработке под iOS. 5 лекция. Работа с данными
Курсы по мобильной разработке под iOS. 5 лекция. Работа с даннымиКурсы по мобильной разработке под iOS. 5 лекция. Работа с данными
Курсы по мобильной разработке под iOS. 5 лекция. Работа с данными
Глеб Тарасов
 
Фундаментальные основы разработки под iOS. Павел Тайкало
Фундаментальные основы разработки под iOS. Павел ТайкалоФундаментальные основы разработки под iOS. Павел Тайкало
Фундаментальные основы разработки под iOS. Павел Тайкало
Stanfy
 
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИСTARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
2ГИС Технологии
 
И снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел ТайкалоИ снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел Тайкало
Stanfy
 
2-е занятие курса iPhone разработки в ГУ-ВШЭ
2-е занятие курса iPhone разработки в ГУ-ВШЭ2-е занятие курса iPhone разработки в ГУ-ВШЭ
2-е занятие курса iPhone разработки в ГУ-ВШЭ
Oleg Parinov
 
Windows Phone School HSE Lecture 3
Windows Phone School HSE Lecture 3Windows Phone School HSE Lecture 3
Windows Phone School HSE Lecture 3
Dmitry Gridnev
 
Курсы по мобильной разработке. 1 лекция. Знакомство с iOS
Курсы по мобильной разработке. 1 лекция. Знакомство с iOSКурсы по мобильной разработке. 1 лекция. Знакомство с iOS
Курсы по мобильной разработке. 1 лекция. Знакомство с iOS
Глеб Тарасов
 
Интуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейс
Интуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейсИнтуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейс
Интуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейс
Глеб Тарасов
 

Similar a Squeek school #6 (20)

Курсы по мобильной разработке под iOS. 5 лекция. Работа с данными
Курсы по мобильной разработке под iOS. 5 лекция. Работа с даннымиКурсы по мобильной разработке под iOS. 5 лекция. Работа с данными
Курсы по мобильной разработке под iOS. 5 лекция. Работа с данными
 
хранение данных
хранение данныххранение данных
хранение данных
 
Фундаментальные основы разработки под iOS. Павел Тайкало
Фундаментальные основы разработки под iOS. Павел ТайкалоФундаментальные основы разработки под iOS. Павел Тайкало
Фундаментальные основы разработки под iOS. Павел Тайкало
 
Squeek 1
Squeek 1Squeek 1
Squeek 1
 
msumobi2. Лекция 1
msumobi2. Лекция 1msumobi2. Лекция 1
msumobi2. Лекция 1
 
Active Record for CoreData
Active Record for CoreDataActive Record for CoreData
Active Record for CoreData
 
SPA инструменты
SPA инструментыSPA инструменты
SPA инструменты
 
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИСTARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
 
Мастер класс по алгоритмам. Часть 1
Мастер класс по алгоритмам. Часть 1Мастер класс по алгоритмам. Часть 1
Мастер класс по алгоритмам. Часть 1
 
И снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел ТайкалоИ снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел Тайкало
 
2-е занятие курса iPhone разработки в ГУ-ВШЭ
2-е занятие курса iPhone разработки в ГУ-ВШЭ2-е занятие курса iPhone разработки в ГУ-ВШЭ
2-е занятие курса iPhone разработки в ГУ-ВШЭ
 
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...
 
Windows Phone School HSE Lecture 3
Windows Phone School HSE Lecture 3Windows Phone School HSE Lecture 3
Windows Phone School HSE Lecture 3
 
Курсы по мобильной разработке. 1 лекция. Знакомство с iOS
Курсы по мобильной разработке. 1 лекция. Знакомство с iOSКурсы по мобильной разработке. 1 лекция. Знакомство с iOS
Курсы по мобильной разработке. 1 лекция. Знакомство с iOS
 
QA Fest 2015. Иван Пашко. XPath yourself. Tips & Tricks
QA Fest 2015. Иван Пашко. XPath yourself. Tips & TricksQA Fest 2015. Иван Пашко. XPath yourself. Tips & Tricks
QA Fest 2015. Иван Пашко. XPath yourself. Tips & Tricks
 
Интуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейс
Интуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейсИнтуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейс
Интуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейс
 
Алексей Андросов "Архитектура фронтенда Яндекс.Почты"
Алексей Андросов "Архитектура фронтенда Яндекс.Почты"Алексей Андросов "Архитектура фронтенда Яндекс.Почты"
Алексей Андросов "Архитектура фронтенда Яндекс.Почты"
 
Js fuckworks
Js fuckworksJs fuckworks
Js fuckworks
 
Влад Ковташ — Yap Database
Влад Ковташ — Yap DatabaseВлад Ковташ — Yap Database
Влад Ковташ — Yap Database
 
Андрей Субботин "Локализация приложений для iOS: как не прострелить себе ногу"
Андрей Субботин "Локализация приложений для iOS: как не прострелить себе ногу"Андрей Субботин "Локализация приложений для iOS: как не прострелить себе ногу"
Андрей Субботин "Локализация приложений для iOS: как не прострелить себе ногу"
 

Más de Sergey Pronin

Empatika Design Hours
Empatika Design HoursEmpatika Design Hours
Empatika Design Hours
Sergey Pronin
 
Greenfield Feedback Squeek
Greenfield Feedback SqueekGreenfield Feedback Squeek
Greenfield Feedback Squeek
Sergey Pronin
 

Más de Sergey Pronin (16)

App in the Air Internship 2018
App in the Air Internship 2018App in the Air Internship 2018
App in the Air Internship 2018
 
PTA Ancillaries
PTA AncillariesPTA Ancillaries
PTA Ancillaries
 
Things you might have missed from CoreData
Things you might have missed from CoreDataThings you might have missed from CoreData
Things you might have missed from CoreData
 
Департамент Программной Инженерии
Департамент Программной ИнженерииДепартамент Программной Инженерии
Департамент Программной Инженерии
 
Mera Dev Fest - Swift vs. Obj-C
Mera Dev Fest - Swift vs. Obj-CMera Dev Fest - Swift vs. Obj-C
Mera Dev Fest - Swift vs. Obj-C
 
Swift School #4
Swift School #4Swift School #4
Swift School #4
 
Swift School #3
Swift School #3Swift School #3
Swift School #3
 
Swift School #2
Swift School #2Swift School #2
Swift School #2
 
Swift School #1
Swift School #1Swift School #1
Swift School #1
 
Empatika Design Hours
Empatika Design HoursEmpatika Design Hours
Empatika Design Hours
 
Greenfield Feedback Squeek
Greenfield Feedback SqueekGreenfield Feedback Squeek
Greenfield Feedback Squeek
 
Squeek School #8
Squeek School #8Squeek School #8
Squeek School #8
 
Squeek School #7
Squeek School #7Squeek School #7
Squeek School #7
 
Squeek School #5
Squeek School #5Squeek School #5
Squeek School #5
 
Squeek school 4
Squeek school 4Squeek school 4
Squeek school 4
 
Squeek School #3
Squeek School #3Squeek School #3
Squeek School #3
 

Squeek school #6

  • 1. squeek school Разработка приложений для iOS суббота, 21 мая 2011 г.
  • 2. Хранение данных • Xml (plist) • SQLite суббота, 21 мая 2011 г.
  • 3. Хранение данных Property Lists • Property Lists - для небольшого объема • Writing an Array to Disk хранит обычные форматы данных iOS NSArray *array = [NSArray arrayWithObjects:@“Foo”, [NSNumber numberWithBool:YES], [NSDate dateWithTimeIntervalSinceNow:60], nil]; [array writeToFile:@“MyArray.plist” atomically:YES]; NSArray * a = [NSArray arrayWithContentsOfFile:xmlFile]; <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <array> <string>Foo</string> <true/> <date>2010-02-02T09:26:18Z</date> </array> </plist> суббота, 21 мая 2011 г.
  • 4. Хранение данных в настройках [[NSUserDefaults standardUserDefaults] setObject: ForKey:]; [[NSUserDefaults standardUserDefaults] objectForKey:]; [[NSUserDefaults standardUserDefaults] synchonize]; суббота, 21 мая 2011 г.
  • 6. а что внутри? Home Directory Layout • Each app has its own set of directories я! • <Application Home> ельз MyApp.app ьн ят ■ ен ■ MyApp -м ■ MainWindow.nib ■ SomeImage.png ■ Documents - добавления здесь! ■ Library ■ Caches ■ Preferences • Applications only read and write within their home directory • Backed up by iTunes during sync (mostly) суббота, 21 мая 2011 г.
  • 7. File Paths in Your Application File Paths in Your Application // Basic directories путь к документам NSString *homePath = NSHomeDirectory(); // Basic directories NSTemporaryDirectory(); NSString *tmpPath = NSString *homePath = NSHomeDirectory(); // Documents directory NSString *tmpPath = NSTemporaryDirectory(); NSArray *paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES); // Documents directory NSArray *paths = NSSearchPathForDirectoriesInDomains NSString *documentsPath = [paths objectAtIndex:0]; (NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsPath = [paths objectAtIndex:0]; // <Application Home>/Documents/foo.plist NSString *fooPath = // <Application stringByAppendingPathComponent:@“foo.plist”]; [documentsPath Home>/Documents/foo.plist NSString *fooPath = [documentsPath stringByAppendingPathComponent:@“foo.plist”]; Tuesday, February 2, 2010 1 Tuesday, February 2, 2010 16 суббота, 21 мая 2011 г.
  • 8. SQLite! • база в файле • нет сервера • простая реализация • включена в iPhone суббота, 21 мая 2011 г.
  • 9. 7 шагов • находим файл базы • подключаемся - sqlite3_open • создаем запрос • готовим, проверяем - sqlite3_prepare_v2 • выполняем - sqlite3_step • завершаем - sqlite3_finalize • закрываем - sqlite3_close суббота, 21 мая 2011 г.
  • 10. шаг 0 - создать БД $ sqlite3 ex1 SQLite version 3.6.11 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite> create table tbl1(one varchar(10), two smallint); sqlite> insert into tbl1 values('hello!',10); sqlite> insert into tbl1 values('goodbye', 20); sqlite> select * from tbl1; hello!|10 goodbye|20 sqlite> CREATE TABLE Person (  id integer unique not null,  first_name char(20),  last_name char(20),  address char(100),  email char(30),  telephone char(15),  birth_date int ); суббота, 21 мая 2011 г.
  • 11. подготовка #import <sqlite3.h> ! NSString *databaseName = @"Cocktails.sql"; ! NSArray *documentPaths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES); ! NSString *documentsDir = [documentPaths objectAtIndex:0]; ! NSString *databasePath = [documentsDir stringByAppendingPathComponent:databaseName]; ! BOOL success; ! NSFileManager *fileManager = [NSFileManager defaultManager]; ! success = [fileManager fileExistsAtPath:databasePath]; ! if(!success) { ! NSString *databasePathFromApp = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:databaseName]; ! [fileManager copyItemAtPath:databasePathFromApp toPath:databasePath error:nil]; ! [fileManager release]; ! } ! суббота, 21 мая 2011 г.
  • 12. чтение sqlite3 *database; ! if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) { ! ! const char *sqlStatement = "select * from cocktail;"; ! ! sqlite3_stmt *compiledStatement; ! ! if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) { ! ! ! while(sqlite3_step(compiledStatement) == SQLITE_ROW) { ! ! ! ! int anId = sqlite3_column_int(compiledStatement, 0); ! ! ! ! NSString *aName = [NSString stringWithUTF8String:(char *) sqlite3_column_text(compiledStatement, 1)]; //... ! ! ! } ! ! } ! ! sqlite3_finalize(compiledStatement); ! } ! sqlite3_close(database); суббота, 21 мая 2011 г.
  • 13. запись • просто sqlite3_step(compiledStatement), при удаче - SQLITE_DONE суббота, 21 мая 2011 г.
  • 14. Сетевая активность приложения • GET/POST запросы • NSURLRequest и NSURLConnection • Защищенное соединение • Парсинг xml • Работа с публичными API суббота, 21 мая 2011 г.
  • 15. Google Maps API Facebook API Яндекс Карты API Twitter API общение с вашим сервером суббота, 21 мая 2011 г.
  • 16. xml <?xml version="1.0" encoding="UTF-8" ?> <painting> <img src="madonna.jpg" alt='Foligno Madonna, by Raphael'/> <caption>This is Raphael's "Foligno" Madonna, painted in <date>1511</date>–<date>1512</date>. </caption> </painting> суббота, 21 мая 2011 г.
  • 17. xml ! NSURL *xmlURL = [NSURL URLWithString:URL]; ! NSXMLParser * rssParser = [[NSXMLParser alloc] initWithContentsOfURL:xmlURL]; ! [rssParser setDelegate:self]; ! [rssParser parse]; NSXMLParserDelegate: - (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *) parseError - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *) elementName namespaceURI:(NSString *)namespaceURI qualifiedName: (NSString *)qName attributes:(NSDictionary *)attributeDict - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *) elementName namespaceURI:(NSString *)namespaceURI qualifiedName: (NSString *)qName - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *) string - (void)parserDidEndDocument:(NSXMLParser *)parser { суббота, 21 мая 2011 г.
  • 18. What does a JSON object look like? json { “instructor” : “Josh Shaffer”, “students” : 60, “itunes-u” : true, “midterm-exam” : null, “assignments” : [ “WhatATool”, “HelloPoly”, “Presence” ] } • NSDictionary *result = [jsonString JSONValue]; y, February 2, 2010 41 суббота, 21 мая 2011 г.
  • 19. NSURLConnection NSString *strUrl = [NSString stringWithString:@"http://prognozempatika.appspot.com/ prognoz?str=Hello, World!"]; NSString *escapedString = [strUrl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSURL *url = [ NSURL URLWithString: @"http://www.yourwebsite.com/image.png" ]; NSURLRequest *request = [ [ NSURLRequest alloc ] initWithURL: url cachePolicy: NSURLRequestReturnCacheDataElseLoad timeoutInterval: 60.0 ]; NSMutableData *data = [ [ NSMutableData data ] retain ]; NSURLConnection * connection = [ [ NSURLConnection alloc ] initWithRequest: request delegate: self ]; -(void)connection:(NSURLConnection *)connection didReceiveResponse: (NSURLResponse *)response { [ data setLength: 0 ]; } -(void)connection:(NSURLConnection *)connection didReceiveData: (NSData *)incomingData { [ data appendData: incomingData ]; } -(void)connectionDidFinishLoading:(NSURLConnection *)connection { NSLog(@"w00t! my image is finished loading!"); NSString *string = [ [ NSString alloc ] initWithData: data encoding:NSUTF8StringEncoding ]; [ data release ]; } суббота, 21 мая 2011 г.