SlideShare une entreprise Scribd logo
1  sur  19
Télécharger pour lire hors ligne
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 г.

Contenu connexe

Tendances

Scala and LiftWeb presentation (Russian)
Scala and LiftWeb presentation (Russian)Scala and LiftWeb presentation (Russian)
Scala and LiftWeb presentation (Russian)Dmitry Stropalov
 
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"Yandex
 
Drupal 7 и history.js или как ajax инфицировать сайт
Drupal 7 и history.js или как ajax инфицировать сайтDrupal 7 и history.js или как ajax инфицировать сайт
Drupal 7 и history.js или как ajax инфицировать сайтDrupalCamp Kyiv Рысь
 
Дмитрий Костюк - Очаровательные серые кнопки: обзор эволюции виджет-тулкитовH...
Дмитрий Костюк - Очаровательные серые кнопки: обзор эволюции виджет-тулкитовH...Дмитрий Костюк - Очаровательные серые кнопки: обзор эволюции виджет-тулкитовH...
Дмитрий Костюк - Очаровательные серые кнопки: обзор эволюции виджет-тулкитовH...Minsk Linux User Group
 
JavaScript-библиотека
JavaScript-библиотекаJavaScript-библиотека
JavaScript-библиотекаVasya Petrov
 

Tendances (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-библиотека
 

Similaire à Squeek school #6

Курсы по мобильной разработке под iOS. 5 лекция. Работа с данными
Курсы по мобильной разработке под iOS. 5 лекция. Работа с даннымиКурсы по мобильной разработке под iOS. 5 лекция. Работа с данными
Курсы по мобильной разработке под iOS. 5 лекция. Работа с даннымиГлеб Тарасов
 
хранение данных
хранение данныххранение данных
хранение данныхNoveo
 
Фундаментальные основы разработки под iOS. Павел Тайкало
Фундаментальные основы разработки под iOS. Павел ТайкалоФундаментальные основы разработки под iOS. Павел Тайкало
Фундаментальные основы разработки под iOS. Павел ТайкалоStanfy
 
Active Record for CoreData
Active Record for CoreDataActive Record for CoreData
Active Record for CoreDataDmitriy Kuragin
 
SPA инструменты
SPA инструментыSPA инструменты
SPA инструментыRoman Dvornov
 
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИСTARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС2ГИС Технологии
 
Мастер класс по алгоритмам. Часть 1
Мастер класс по алгоритмам. Часть 1Мастер класс по алгоритмам. Часть 1
Мастер класс по алгоритмам. Часть 1Pavel Egorov
 
И снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел ТайкалоИ снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел ТайкалоStanfy
 
2-е занятие курса iPhone разработки в ГУ-ВШЭ
2-е занятие курса iPhone разработки в ГУ-ВШЭ2-е занятие курса iPhone разработки в ГУ-ВШЭ
2-е занятие курса iPhone разработки в ГУ-ВШЭOleg Parinov
 
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...Ontico
 
Windows Phone School HSE Lecture 3
Windows Phone School HSE Lecture 3Windows Phone School HSE Lecture 3
Windows Phone School HSE Lecture 3Dmitry Gridnev
 
Курсы по мобильной разработке. 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 & TricksQAFest
 
Интуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейс
Интуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейсИнтуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейс
Интуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейсГлеб Тарасов
 
Алексей Андросов "Архитектура фронтенда Яндекс.Почты"
Алексей Андросов "Архитектура фронтенда Яндекс.Почты"Алексей Андросов "Архитектура фронтенда Яндекс.Почты"
Алексей Андросов "Архитектура фронтенда Яндекс.Почты"Yandex
 
Влад Ковташ — Yap Database
Влад Ковташ — Yap DatabaseВлад Ковташ — Yap Database
Влад Ковташ — Yap DatabaseCocoaHeads
 
Андрей Субботин "Локализация приложений для iOS: как не прострелить себе ногу"
Андрей Субботин "Локализация приложений для iOS: как не прострелить себе ногу"Андрей Субботин "Локализация приложений для iOS: как не прострелить себе ногу"
Андрей Субботин "Локализация приложений для iOS: как не прострелить себе ногу"Yandex
 

Similaire à 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: как не прострелить себе ногу"
 

Plus de Sergey Pronin

App in the Air Internship 2018
App in the Air Internship 2018App in the Air Internship 2018
App in the Air Internship 2018Sergey Pronin
 
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 CoreDataSergey Pronin
 
Департамент Программной Инженерии
Департамент Программной ИнженерииДепартамент Программной Инженерии
Департамент Программной ИнженерииSergey Pronin
 
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-CSergey Pronin
 
Empatika Design Hours
Empatika Design HoursEmpatika Design Hours
Empatika Design HoursSergey Pronin
 
Greenfield Feedback Squeek
Greenfield Feedback SqueekGreenfield Feedback Squeek
Greenfield Feedback SqueekSergey Pronin
 

Plus 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 г.