SlideShare une entreprise Scribd logo
1  sur  24
Télécharger pour lire hors ligne
Хранение данных в 
     iPhone 
           SQLite, FMDB, 
 SQLitePersistenceObjects, CoreData 
Где можно хранить данные 
•  NSUserDefaults 
•  SQLite 

•  На сервере ;) 
•  В файлах со своим форматом 
•  Включаем фантазию 
NSUserDefaults 
•  Небольшой набор данных, не 
   предполагающий запросов 
•  Примитивные типы данных – NSString, 
   NSNumber, NSDate, NSArray, NSData, 
   NSDiceonary 
•  Другие типы данных  нуждаются в 
   сериализации / десериализации      
   NSObject <‐> NSData  
NSUserDefaults 
                                 Пример кода 
// Находим хранилище	
NSUserDefaults *standardUserDefaults =
  [NSUserDefaults standardUserDefaults];	

// Записываем данные	
[standardUserDefaults setObject:myString
  		 	 	 	 	 	 	 	 	 forKey:@"Prefs"];	

// Сохраняем	
[standardUserDefaults synchronize];
NSUserDefaults 
                                    PlayingFile 
                                     NSString 

                   SoundPrefs       Input URL 
Preferences       NSDic-onary        NSString 
NSDic-onary 
                                    Playing File 
                                      NSData 
                  GraphicalPrefs 
                  NSDic-onary          … 
SQLite 
•  Библиотека, написанная на C 
•  Поддерживает большую часть SQL92, 
   включая транзакции и триггеры 
•  Хранит данные в файле 
•  Открытый исходный код 
iPhone + SQLite = libsqlite3 
•  Низкоуровневый код на C 
•  Отсутствие ООП 

•  Создание таблиц и зависимостей между 
   ними – задача программиста 
•  Сериализация сложных объектов и связей – 
   задача ... того же программиста 
libsqlite3 
                                Пример кода 
// Открываем БД	
if (sqlite3_open([dbPath UTF8String], &db)
  == SQLITE_OK) {	

// Готовим запрос	
сonst char *sql = "select coffeeID,
  coffeeName from сoffee"; 
libsqlite3 
// Еще раз готовим запрос	
                                         Пример кода 
if(sqlite3_prepare_v2(db, sql, -1, &selectstmt, NULL)
  == SQLITE_OK) {	

// Пока есть строки таблицы	
// Достаем все данные	
while(sqlite3_step(selectstmt) == SQLITE_ROW) {	
NSInteger primaryKey = 	
	 		 	    sqlite3_column_int(selectstmt, 0);	
NSString * name = [NSString stringWithUTF8String:	
           (char *)sqlite3_column_text(selectstmt, 1)]	
} 
FMDB 
•  Обвертка над SQLite 
•  Все еще полноценный SQL 
•  За создание таблиц  и зависимостей 
   между ними, сериализацию отвечает 
   программист 
•  Удобнее, чем libsqlite3 
FMDB 
                                Пример кода 
// Открываем БД	
FMDatabase * db = [FMDatabase
  databaseWithPath:path]; 	

// Записываем данные	
[db executeUpdate:	
  @"insert into coffee values (?, ?)",
  @”1”, @”Vodka”];  
FMDB 
                                 Пример кода 
// Выполняем запрос	
FMResultSet *rs = [db executeQuery:	
@"select coffeeID,coffeeName from coffee
  where coffeeID = ?", key]; 	

// Забираем данные	
if ([rs next]) {	
  NSString * name = 	
    [rs stringForColumn:@"coffeeName "]; 	
}
SQLite Persistent Objects 
•  Еще одна обвертка над SQLite 
•  Полнофункциональная ORM  
•  Работа на уровне классов, а не на уровне 
   таблиц базы данных 
•  За создание таблиц и зависимостей 
   отвечает библиотека 
•  Полноценный SQL  (сложно составлять 
   вложенные запросы из‐за структуры базы) 
SQLite Persistent Objects 
                                 Пример кода 
#import "SQLitePersistentObject.h"	
// Всего пару строк, и у нас уже есть Entity	
@interface Coffee : SQLitePersistentObject {	
	 NSString *coffeeName;	
}	

@property (nonatomic, retain) 	
	 	NSString *coffeeName;	

@end
SQLite Persistent Objects 
                               Пример кода 
// Открываем БД	
[[SQLiteInstanceManager sharedManager]
  setDatabaseFilepath:@”db.sqlite"];	

// Создаем и сохраняем данные	
Coffee *newCoffee = [Coffee alloc] init];	
newCoffee.coffeeName = @”Cognac";	
[newCoffee save];
SQLite Persistent Objects 
                                       Пример кода 
Coffee * coffee = 	
[Coffee findFirstByCriteria:	
      @"WHERE coffeeName = ’Burn’"]; 

                  Кроме этого 
• Поддержка связей один к одному, один ко многим, 
  
много ко многим 
• Поддержка transient свойств 
  
• Возможность сохранения некоторых классов в базу 
  
(UIImage, UIColor) 
Core Data 

                 Core Data 
•  Framework из MacOS, в iPhone SDK с версии 3.0 
•  Поддерживает три вида хранилищ данных ‐   
   Binary, inMemory, SQLite 
•  Полнофункциональная ORM 
•  Работа на уровне классов 
•  Язык запросов похож на SQL 
•  Графический интерфейс для редактирования 
   модели БД в Xcode  
Core Data 

                Core Data 
•  Поддержка операций undo/redo на графе 
   объектов 
•  Эффективная работа с табличными 
   данными без полной загрузки их в память 
•  Валидация объектов на этапе сохранения 
•  Контроль версий модели БД 
Core Data 

Core Data. Создание модели 
    GUI     Или                          Код 
              NSEntityDescription *runEntity =[[NSEntityDescription alloc]
                    init];	 	
              [runEntity setName:@"Run"];	 	
              [runEntity setManagedObjectClassName:@"Run"];	      	
              [mom setEntities:[NSArray arrayWithObject:runEntity]];	

              NSAttributeDescription *dateAttribute =
                    [[NSAttributeDescription alloc] init];	

              [dateAttribute setName:@"date"];	
              [dateAttribute setAttributeType:NSDateAttributeType];	
              [dateAttribute setOptional:NO];	
              NSExpression *lhs = [NSExpression
                    expressionForEvaluatedObject];	
              NSExpression *rhs = [NSExpression expressionForConstantValue:	
                                   [NSNumber numberWithInteger:0]];	
              NSPredicate *validationPredicate = [NSComparisonPredicate	

                   predicateWithLeftExpression:lhs	
                                                 rightExpression:rhs	

                   modifier:NSDirectPredicateModifier	

                   type:NSGreaterThanPredicateOperatorType	
                                               options:0]; 
Core Data 

    Core Data. Генерация классов 
@interface Coffee:   NSManagedObject {	

}	
@property (nonatomic, retain) NSString * coffeeName;	
@property (nonatomic, retain) NSString * country;	
@end	

@interface Coffee (CoreDataGeneratedAccessors)	
- (void)addCoffeeImageObject:(Image *)value;	
- (void)removeCoffeeImageObject:(Image *)value;	
- (void)addCoffeeImages:(NSSet *)value;	
- (void)removeCoffeeImage:(NSSet *)value;	

@end 
Core Data 

    Core Data. Генерация классов 
// Создаем	
Coffee * coffee = 	
[NSEntityDescription insertNewObjectForEntityForName:	
  [Coffee entityName] 	
 inManagedObjectContext:managedObjectContext];	

coffee.coffeeName = @”Absinthe";	
// и сохраняем данные	
NSError * error;	
if (![managedObjectContext save:&error]){	
  NSLog(@”Please don’t mix %@ with coffee : %@", [coffee
   description], [error userInfo]);	
}
Core Data 

     Core Data. “Особенности” 
•  Местами все еще «сырая» документация 
•  Логические ошибки в базовых классах 
Личное мнение 
NSUserDefaults, если  
•  небольшое количество данных 
•  отсутствуют сложные запросы 

Core Data Framework, если  
•  необходимо работать с большими объемами 
   информации 
Спасибо за внимание! 
Тайкало Павел 
Email:•.kilew@gmail.com 
Skype:•.kilew 

Contenu connexe

Tendances

Drupal 7 и history.js или как ajax инфицировать сайт
Drupal 7 и history.js или как ajax инфицировать сайтDrupal 7 и history.js или как ajax инфицировать сайт
Drupal 7 и history.js или как ajax инфицировать сайтDrupalCamp Kyiv Рысь
 
Курсы по мобильной разработке. 1 лекция. Знакомство с iOS
Курсы по мобильной разработке. 1 лекция. Знакомство с iOSКурсы по мобильной разработке. 1 лекция. Знакомство с iOS
Курсы по мобильной разработке. 1 лекция. Знакомство с iOSГлеб Тарасов
 
Yii development
Yii developmentYii development
Yii developmentMageCloud
 
Владимир Горбенко «Использование блоков в Objective-C»
Владимир Горбенко «Использование блоков в Objective-C»Владимир Горбенко «Использование блоков в Objective-C»
Владимир Горбенко «Использование блоков в Objective-C»e-Legion
 
Making Scalable JavaScript Application
Making Scalable JavaScript ApplicationMaking Scalable JavaScript Application
Making Scalable JavaScript ApplicationMikhail Davydov
 
Web осень 2013 лекция 3
Web осень 2013 лекция 3Web осень 2013 лекция 3
Web осень 2013 лекция 3Technopark
 
Web Internship - PHP and MySQL
Web Internship - PHP and MySQLWeb Internship - PHP and MySQL
Web Internship - PHP and MySQLNoveo
 
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"Yandex
 
Влад Ковташ — Yap Database
Влад Ковташ — Yap DatabaseВлад Ковташ — Yap Database
Влад Ковташ — Yap DatabaseCocoaHeads
 
Работа с БД в Drupal 7
Работа с БД в Drupal 7Работа с БД в Drupal 7
Работа с БД в Drupal 7Eugene Fidelin
 
Windows Azure and node js
Windows Azure and node jsWindows Azure and node js
Windows Azure and node jsAlex Tumanoff
 
Алексей Андросов "Архитектура фронтенда Яндекс.Почты"
Алексей Андросов "Архитектура фронтенда Яндекс.Почты"Алексей Андросов "Архитектура фронтенда Яндекс.Почты"
Алексей Андросов "Архитектура фронтенда Яндекс.Почты"Yandex
 
XML Native Database на примере SednaXML
XML Native Database на примере SednaXMLXML Native Database на примере SednaXML
XML Native Database на примере SednaXMLSlach
 
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)Roman Dvornov
 
Web осень 2013 лекция 1
Web осень 2013 лекция 1Web осень 2013 лекция 1
Web осень 2013 лекция 1Technopark
 
Web осень 2013 лекция 6
Web осень 2013 лекция 6Web осень 2013 лекция 6
Web осень 2013 лекция 6Technopark
 

Tendances (20)

Drupal 7 and History.js
Drupal 7 and History.jsDrupal 7 and History.js
Drupal 7 and History.js
 
Doctrine 2
Doctrine 2Doctrine 2
Doctrine 2
 
Drupal 7 и history.js или как ajax инфицировать сайт
Drupal 7 и history.js или как ajax инфицировать сайтDrupal 7 и history.js или как ajax инфицировать сайт
Drupal 7 и history.js или как ajax инфицировать сайт
 
Курсы по мобильной разработке. 1 лекция. Знакомство с iOS
Курсы по мобильной разработке. 1 лекция. Знакомство с iOSКурсы по мобильной разработке. 1 лекция. Знакомство с iOS
Курсы по мобильной разработке. 1 лекция. Знакомство с iOS
 
Yii development
Yii developmentYii development
Yii development
 
Владимир Горбенко «Использование блоков в Objective-C»
Владимир Горбенко «Использование блоков в Objective-C»Владимир Горбенко «Использование блоков в Objective-C»
Владимир Горбенко «Использование блоков в Objective-C»
 
Making Scalable JavaScript Application
Making Scalable JavaScript ApplicationMaking Scalable JavaScript Application
Making Scalable JavaScript Application
 
Web осень 2013 лекция 3
Web осень 2013 лекция 3Web осень 2013 лекция 3
Web осень 2013 лекция 3
 
Web Internship - PHP and MySQL
Web Internship - PHP and MySQLWeb Internship - PHP and MySQL
Web Internship - PHP and MySQL
 
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"
 
Влад Ковташ — Yap Database
Влад Ковташ — Yap DatabaseВлад Ковташ — Yap Database
Влад Ковташ — Yap Database
 
Squeek school #6
Squeek school #6Squeek school #6
Squeek school #6
 
Работа с БД в Drupal 7
Работа с БД в Drupal 7Работа с БД в Drupal 7
Работа с БД в Drupal 7
 
Windows Azure and node js
Windows Azure and node jsWindows Azure and node js
Windows Azure and node js
 
My sql 1
My sql 1My sql 1
My sql 1
 
Алексей Андросов "Архитектура фронтенда Яндекс.Почты"
Алексей Андросов "Архитектура фронтенда Яндекс.Почты"Алексей Андросов "Архитектура фронтенда Яндекс.Почты"
Алексей Андросов "Архитектура фронтенда Яндекс.Почты"
 
XML Native Database на примере SednaXML
XML Native Database на примере SednaXMLXML Native Database на примере SednaXML
XML Native Database на примере SednaXML
 
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)
 
Web осень 2013 лекция 1
Web осень 2013 лекция 1Web осень 2013 лекция 1
Web осень 2013 лекция 1
 
Web осень 2013 лекция 6
Web осень 2013 лекция 6Web осень 2013 лекция 6
Web осень 2013 лекция 6
 

En vedette

Hadoop Operations: Starting Out Small / So Your Cluster Isn't Yahoo-sized (yet)
Hadoop Operations: Starting Out Small / So Your Cluster Isn't Yahoo-sized (yet)Hadoop Operations: Starting Out Small / So Your Cluster Isn't Yahoo-sized (yet)
Hadoop Operations: Starting Out Small / So Your Cluster Isn't Yahoo-sized (yet)Michael Arnold
 
Real time websites and mobile apps with SignalR
Real time websites and mobile apps with SignalRReal time websites and mobile apps with SignalR
Real time websites and mobile apps with SignalRRoy Cornelissen
 
November Camp - Spec BDD with PHPSpec 2
November Camp - Spec BDD with PHPSpec 2November Camp - Spec BDD with PHPSpec 2
November Camp - Spec BDD with PHPSpec 2Kacper Gunia
 
Introduction to reactive programming & ReactiveCocoa
Introduction to reactive programming & ReactiveCocoaIntroduction to reactive programming & ReactiveCocoa
Introduction to reactive programming & ReactiveCocoaFlorent Pillet
 
Netflix Product & Campaign Development
Netflix Product & Campaign DevelopmentNetflix Product & Campaign Development
Netflix Product & Campaign DevelopmentNorman Tran
 
Philosophy of Big Data: Big Data, the Individual, and Society
Philosophy of Big Data: Big Data, the Individual, and SocietyPhilosophy of Big Data: Big Data, the Individual, and Society
Philosophy of Big Data: Big Data, the Individual, and SocietyMelanie Swan
 
Aucun des 500 retailers étudiés en Europe n'a correctement référencé ses poin...
Aucun des 500 retailers étudiés en Europe n'a correctement référencé ses poin...Aucun des 500 retailers étudiés en Europe n'a correctement référencé ses poin...
Aucun des 500 retailers étudiés en Europe n'a correctement référencé ses poin...Mobilosoft
 
Caching and tuning fun for high scalability
Caching and tuning fun for high scalabilityCaching and tuning fun for high scalability
Caching and tuning fun for high scalabilityWim Godden
 
Mobile Developer's Dilemma
Mobile Developer's DilemmaMobile Developer's Dilemma
Mobile Developer's DilemmaPaul Golding
 
16 november presentation 1physicalmeeting for wsis forum 2013
16 november presentation 1physicalmeeting for wsis forum 201316 november presentation 1physicalmeeting for wsis forum 2013
16 november presentation 1physicalmeeting for wsis forum 2013otienookoth
 
Los diamantes son para siempre, las aplicaciones móviles no
Los diamantes son para siempre, las aplicaciones móviles noLos diamantes son para siempre, las aplicaciones móviles no
Los diamantes son para siempre, las aplicaciones móviles noJorge Galindo Cruces
 
Digital East 2011 - LinkedIn & Twitter Marketing Strategy
Digital East 2011 - LinkedIn & Twitter Marketing StrategyDigital East 2011 - LinkedIn & Twitter Marketing Strategy
Digital East 2011 - LinkedIn & Twitter Marketing StrategyRachael King
 
Lua in games
Lua in gamesLua in games
Lua in gamesSon Aris
 
6 Técnicas para mejorar el quality score de tus campañas SEM
6 Técnicas para mejorar el quality score de tus campañas SEM6 Técnicas para mejorar el quality score de tus campañas SEM
6 Técnicas para mejorar el quality score de tus campañas SEMMontserrat Peñarroya
 
Why SharePoint 2010 may not be the Answer to the Social Intranet
Why SharePoint 2010 may not be the Answer to the Social IntranetWhy SharePoint 2010 may not be the Answer to the Social Intranet
Why SharePoint 2010 may not be the Answer to the Social IntranetThomas Vander Wal
 
WCCC 2011 Startup of the Year nominee form
WCCC 2011 Startup of the Year nominee formWCCC 2011 Startup of the Year nominee form
WCCC 2011 Startup of the Year nominee formChuck Robinson
 
Marketing en Google+
Marketing en Google+Marketing en Google+
Marketing en Google+Mikel Secada
 
PloneSocial Roadmap PLOG2013
PloneSocial Roadmap PLOG2013PloneSocial Roadmap PLOG2013
PloneSocial Roadmap PLOG2013Guido Stevens
 
Data migration to Drupal using Migrate Module
Data migration to Drupal using Migrate ModuleData migration to Drupal using Migrate Module
Data migration to Drupal using Migrate ModuleSrijan Technologies
 
Text, Content, and Social Analytics: BI for the New World
Text, Content, and Social Analytics: BI for the New WorldText, Content, and Social Analytics: BI for the New World
Text, Content, and Social Analytics: BI for the New WorldSeth Grimes
 

En vedette (20)

Hadoop Operations: Starting Out Small / So Your Cluster Isn't Yahoo-sized (yet)
Hadoop Operations: Starting Out Small / So Your Cluster Isn't Yahoo-sized (yet)Hadoop Operations: Starting Out Small / So Your Cluster Isn't Yahoo-sized (yet)
Hadoop Operations: Starting Out Small / So Your Cluster Isn't Yahoo-sized (yet)
 
Real time websites and mobile apps with SignalR
Real time websites and mobile apps with SignalRReal time websites and mobile apps with SignalR
Real time websites and mobile apps with SignalR
 
November Camp - Spec BDD with PHPSpec 2
November Camp - Spec BDD with PHPSpec 2November Camp - Spec BDD with PHPSpec 2
November Camp - Spec BDD with PHPSpec 2
 
Introduction to reactive programming & ReactiveCocoa
Introduction to reactive programming & ReactiveCocoaIntroduction to reactive programming & ReactiveCocoa
Introduction to reactive programming & ReactiveCocoa
 
Netflix Product & Campaign Development
Netflix Product & Campaign DevelopmentNetflix Product & Campaign Development
Netflix Product & Campaign Development
 
Philosophy of Big Data: Big Data, the Individual, and Society
Philosophy of Big Data: Big Data, the Individual, and SocietyPhilosophy of Big Data: Big Data, the Individual, and Society
Philosophy of Big Data: Big Data, the Individual, and Society
 
Aucun des 500 retailers étudiés en Europe n'a correctement référencé ses poin...
Aucun des 500 retailers étudiés en Europe n'a correctement référencé ses poin...Aucun des 500 retailers étudiés en Europe n'a correctement référencé ses poin...
Aucun des 500 retailers étudiés en Europe n'a correctement référencé ses poin...
 
Caching and tuning fun for high scalability
Caching and tuning fun for high scalabilityCaching and tuning fun for high scalability
Caching and tuning fun for high scalability
 
Mobile Developer's Dilemma
Mobile Developer's DilemmaMobile Developer's Dilemma
Mobile Developer's Dilemma
 
16 november presentation 1physicalmeeting for wsis forum 2013
16 november presentation 1physicalmeeting for wsis forum 201316 november presentation 1physicalmeeting for wsis forum 2013
16 november presentation 1physicalmeeting for wsis forum 2013
 
Los diamantes son para siempre, las aplicaciones móviles no
Los diamantes son para siempre, las aplicaciones móviles noLos diamantes son para siempre, las aplicaciones móviles no
Los diamantes son para siempre, las aplicaciones móviles no
 
Digital East 2011 - LinkedIn & Twitter Marketing Strategy
Digital East 2011 - LinkedIn & Twitter Marketing StrategyDigital East 2011 - LinkedIn & Twitter Marketing Strategy
Digital East 2011 - LinkedIn & Twitter Marketing Strategy
 
Lua in games
Lua in gamesLua in games
Lua in games
 
6 Técnicas para mejorar el quality score de tus campañas SEM
6 Técnicas para mejorar el quality score de tus campañas SEM6 Técnicas para mejorar el quality score de tus campañas SEM
6 Técnicas para mejorar el quality score de tus campañas SEM
 
Why SharePoint 2010 may not be the Answer to the Social Intranet
Why SharePoint 2010 may not be the Answer to the Social IntranetWhy SharePoint 2010 may not be the Answer to the Social Intranet
Why SharePoint 2010 may not be the Answer to the Social Intranet
 
WCCC 2011 Startup of the Year nominee form
WCCC 2011 Startup of the Year nominee formWCCC 2011 Startup of the Year nominee form
WCCC 2011 Startup of the Year nominee form
 
Marketing en Google+
Marketing en Google+Marketing en Google+
Marketing en Google+
 
PloneSocial Roadmap PLOG2013
PloneSocial Roadmap PLOG2013PloneSocial Roadmap PLOG2013
PloneSocial Roadmap PLOG2013
 
Data migration to Drupal using Migrate Module
Data migration to Drupal using Migrate ModuleData migration to Drupal using Migrate Module
Data migration to Drupal using Migrate Module
 
Text, Content, and Social Analytics: BI for the New World
Text, Content, and Social Analytics: BI for the New WorldText, Content, and Social Analytics: BI for the New World
Text, Content, and Social Analytics: BI for the New World
 

Similaire à Хранение данных в iPhone. (FMDB, SQL-Persistence, CoreData)

Школа-студия разработки для iOS. Лекция 4. Работа с данными
Школа-студия разработки для iOS. Лекция 4. Работа с даннымиШкола-студия разработки для iOS. Лекция 4. Работа с данными
Школа-студия разработки для iOS. Лекция 4. Работа с даннымиГлеб Тарасов
 
Active Record for CoreData
Active Record for CoreDataActive Record for CoreData
Active Record for CoreDataDmitriy Kuragin
 
Курсы по мобильной разработке под iOS. 5 лекция. Работа с данными
Курсы по мобильной разработке под iOS. 5 лекция. Работа с даннымиКурсы по мобильной разработке под iOS. 5 лекция. Работа с данными
Курсы по мобильной разработке под iOS. 5 лекция. Работа с даннымиГлеб Тарасов
 
И снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел ТайкалоИ снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел ТайкалоStanfy
 
C++ и базы данных
C++ и базы данныхC++ и базы данных
C++ и базы данныхmcroitor
 
Интуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейс
Интуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейсИнтуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейс
Интуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейсГлеб Тарасов
 
Использование Sedna в WEB
Использование Sedna в WEBИспользование Sedna в WEB
Использование Sedna в WEBAlexandre Kalendarev
 
Взломать сайт на ASP.NET
Взломать сайт на ASP.NETВзломать сайт на ASP.NET
Взломать сайт на ASP.NETPositive Hack Days
 
C#. От основ к эффективному коду
C#. От основ к эффективному кодуC#. От основ к эффективному коду
C#. От основ к эффективному кодуVasiliy Deynega
 
Behat в PHP с использованием Behat и Mink
Behat в PHP с использованием Behat и MinkBehat в PHP с использованием Behat и Mink
Behat в PHP с использованием Behat и Minktyomo4ka
 
automation is iOS development
automation is iOS developmentautomation is iOS development
automation is iOS developmentIvan Trifonov
 
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...Yandex
 
Hacking PostgreSQL. Обзор исходного кода
Hacking PostgreSQL. Обзор исходного кодаHacking PostgreSQL. Обзор исходного кода
Hacking PostgreSQL. Обзор исходного кодаAnastasia Lubennikova
 
Взломать Web-сайт на ASP.NET? Сложно, но можно!
Взломать Web-сайт на ASP.NET? Сложно, но можно!Взломать Web-сайт на ASP.NET? Сложно, но можно!
Взломать Web-сайт на ASP.NET? Сложно, но можно!Vladimir Kochetkov
 
Objective-C 2.0: краткое описание языка и рантайма
Objective-C 2.0: краткое описание языка и рантаймаObjective-C 2.0: краткое описание языка и рантайма
Objective-C 2.0: краткое описание языка и рантаймаYandex
 
Мастер класс по алгоритмам. Часть 1
Мастер класс по алгоритмам. Часть 1Мастер класс по алгоритмам. Часть 1
Мастер класс по алгоритмам. Часть 1Pavel Egorov
 
Система обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyСистема обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyRegn
 

Similaire à Хранение данных в iPhone. (FMDB, SQL-Persistence, CoreData) (20)

Школа-студия разработки для iOS. Лекция 4. Работа с данными
Школа-студия разработки для iOS. Лекция 4. Работа с даннымиШкола-студия разработки для iOS. Лекция 4. Работа с данными
Школа-студия разработки для iOS. Лекция 4. Работа с данными
 
Active Record for CoreData
Active Record for CoreDataActive Record for CoreData
Active Record for CoreData
 
Курсы по мобильной разработке под iOS. 5 лекция. Работа с данными
Курсы по мобильной разработке под iOS. 5 лекция. Работа с даннымиКурсы по мобильной разработке под iOS. 5 лекция. Работа с данными
Курсы по мобильной разработке под iOS. 5 лекция. Работа с данными
 
И снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел ТайкалоИ снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел Тайкало
 
C++ и базы данных
C++ и базы данныхC++ и базы данных
C++ и базы данных
 
Интуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейс
Интуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейсИнтуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейс
Интуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейс
 
msumobi2. Лекция 1
msumobi2. Лекция 1msumobi2. Лекция 1
msumobi2. Лекция 1
 
Js fuckworks
Js fuckworksJs fuckworks
Js fuckworks
 
Использование Sedna в WEB
Использование Sedna в WEBИспользование Sedna в WEB
Использование Sedna в WEB
 
Взломать сайт на ASP.NET
Взломать сайт на ASP.NETВзломать сайт на ASP.NET
Взломать сайт на ASP.NET
 
C#. От основ к эффективному коду
C#. От основ к эффективному кодуC#. От основ к эффективному коду
C#. От основ к эффективному коду
 
Behat в PHP с использованием Behat и Mink
Behat в PHP с использованием Behat и MinkBehat в PHP с использованием Behat и Mink
Behat в PHP с использованием Behat и Mink
 
automation is iOS development
automation is iOS developmentautomation is iOS development
automation is iOS development
 
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
 
Hacking PostgreSQL. Обзор исходного кода
Hacking PostgreSQL. Обзор исходного кодаHacking PostgreSQL. Обзор исходного кода
Hacking PostgreSQL. Обзор исходного кода
 
Взломать Web-сайт на ASP.NET? Сложно, но можно!
Взломать Web-сайт на ASP.NET? Сложно, но можно!Взломать Web-сайт на ASP.NET? Сложно, но можно!
Взломать Web-сайт на ASP.NET? Сложно, но можно!
 
Objective-C 2.0: краткое описание языка и рантайма
Objective-C 2.0: краткое описание языка и рантаймаObjective-C 2.0: краткое описание языка и рантайма
Objective-C 2.0: краткое описание языка и рантайма
 
Мастер класс по алгоритмам. Часть 1
Мастер класс по алгоритмам. Часть 1Мастер класс по алгоритмам. Часть 1
Мастер класс по алгоритмам. Часть 1
 
Yserver
YserverYserver
Yserver
 
Система обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyСистема обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на Groovy
 

Plus de Yandex

Kanban at Yandex Images (Agile Days 2013)
Kanban at Yandex Images (Agile Days 2013)Kanban at Yandex Images (Agile Days 2013)
Kanban at Yandex Images (Agile Days 2013)Yandex
 
iPhoneDevCamp Ukraine - вступление
iPhoneDevCamp Ukraine - вступлениеiPhoneDevCamp Ukraine - вступление
iPhoneDevCamp Ukraine - вступлениеYandex
 
Разработка кросс-платформенного кода между iPhone &lt; -> Windows с помощью o...
Разработка кросс-платформенного кода между iPhone &lt; -> Windows с помощью o...Разработка кросс-платформенного кода между iPhone &lt; -> Windows с помощью o...
Разработка кросс-платформенного кода между iPhone &lt; -> Windows с помощью o...Yandex
 
Обзор фреймворков в iPhone SDK
Обзор фреймворков в iPhone SDKОбзор фреймворков в iPhone SDK
Обзор фреймворков в iPhone SDKYandex
 
Push-уведомления для разработчика и пользователя
Push-уведомления для разработчика и пользователяPush-уведомления для разработчика и пользователя
Push-уведомления для разработчика и пользователяYandex
 
Unity3d - простой путь к iPhone приложению
Unity3d - простой путь к iPhone приложениюUnity3d - простой путь к iPhone приложению
Unity3d - простой путь к iPhone приложениюYandex
 
iPhone Unit Testing (Google tool Box)
iPhone Unit Testing (Google tool Box)iPhone Unit Testing (Google tool Box)
iPhone Unit Testing (Google tool Box)Yandex
 
Принципы разработки ПО для iPhone с использованием акселерометра
Принципы разработки ПО для iPhone с использованием акселерометраПринципы разработки ПО для iPhone с использованием акселерометра
Принципы разработки ПО для iPhone с использованием акселерометраYandex
 

Plus de Yandex (8)

Kanban at Yandex Images (Agile Days 2013)
Kanban at Yandex Images (Agile Days 2013)Kanban at Yandex Images (Agile Days 2013)
Kanban at Yandex Images (Agile Days 2013)
 
iPhoneDevCamp Ukraine - вступление
iPhoneDevCamp Ukraine - вступлениеiPhoneDevCamp Ukraine - вступление
iPhoneDevCamp Ukraine - вступление
 
Разработка кросс-платформенного кода между iPhone &lt; -> Windows с помощью o...
Разработка кросс-платформенного кода между iPhone &lt; -> Windows с помощью o...Разработка кросс-платформенного кода между iPhone &lt; -> Windows с помощью o...
Разработка кросс-платформенного кода между iPhone &lt; -> Windows с помощью o...
 
Обзор фреймворков в iPhone SDK
Обзор фреймворков в iPhone SDKОбзор фреймворков в iPhone SDK
Обзор фреймворков в iPhone SDK
 
Push-уведомления для разработчика и пользователя
Push-уведомления для разработчика и пользователяPush-уведомления для разработчика и пользователя
Push-уведомления для разработчика и пользователя
 
Unity3d - простой путь к iPhone приложению
Unity3d - простой путь к iPhone приложениюUnity3d - простой путь к iPhone приложению
Unity3d - простой путь к iPhone приложению
 
iPhone Unit Testing (Google tool Box)
iPhone Unit Testing (Google tool Box)iPhone Unit Testing (Google tool Box)
iPhone Unit Testing (Google tool Box)
 
Принципы разработки ПО для iPhone с использованием акселерометра
Принципы разработки ПО для iPhone с использованием акселерометраПринципы разработки ПО для iPhone с использованием акселерометра
Принципы разработки ПО для iPhone с использованием акселерометра
 

Хранение данных в iPhone. (FMDB, SQL-Persistence, CoreData)

  • 1. Хранение данных в  iPhone  SQLite, FMDB,  SQLitePersistenceObjects, CoreData 
  • 2. Где можно хранить данные  •  NSUserDefaults  •  SQLite  •  На сервере ;)  •  В файлах со своим форматом  •  Включаем фантазию 
  • 3. NSUserDefaults  •  Небольшой набор данных, не  предполагающий запросов  •  Примитивные типы данных – NSString,  NSNumber, NSDate, NSArray, NSData,  NSDiceonary  •  Другие типы данных  нуждаются в  сериализации / десериализации       NSObject <‐> NSData  
  • 4. NSUserDefaults  Пример кода  // Находим хранилище NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults]; // Записываем данные [standardUserDefaults setObject:myString forKey:@"Prefs"]; // Сохраняем [standardUserDefaults synchronize];
  • 5. NSUserDefaults  PlayingFile  NSString  SoundPrefs  Input URL  Preferences  NSDic-onary  NSString  NSDic-onary  Playing File  NSData  GraphicalPrefs  NSDic-onary  … 
  • 6. SQLite  •  Библиотека, написанная на C  •  Поддерживает большую часть SQL92,  включая транзакции и триггеры  •  Хранит данные в файле  •  Открытый исходный код 
  • 7. iPhone + SQLite = libsqlite3  •  Низкоуровневый код на C  •  Отсутствие ООП  •  Создание таблиц и зависимостей между  ними – задача программиста  •  Сериализация сложных объектов и связей –  задача ... того же программиста 
  • 8. libsqlite3  Пример кода  // Открываем БД if (sqlite3_open([dbPath UTF8String], &db) == SQLITE_OK) { // Готовим запрос сonst char *sql = "select coffeeID, coffeeName from сoffee"; 
  • 9. libsqlite3  // Еще раз готовим запрос Пример кода  if(sqlite3_prepare_v2(db, sql, -1, &selectstmt, NULL) == SQLITE_OK) { // Пока есть строки таблицы // Достаем все данные while(sqlite3_step(selectstmt) == SQLITE_ROW) { NSInteger primaryKey = sqlite3_column_int(selectstmt, 0); NSString * name = [NSString stringWithUTF8String: (char *)sqlite3_column_text(selectstmt, 1)] } 
  • 10. FMDB  •  Обвертка над SQLite  •  Все еще полноценный SQL  •  За создание таблиц  и зависимостей  между ними, сериализацию отвечает  программист  •  Удобнее, чем libsqlite3 
  • 11. FMDB  Пример кода  // Открываем БД FMDatabase * db = [FMDatabase databaseWithPath:path]; // Записываем данные [db executeUpdate: @"insert into coffee values (?, ?)", @”1”, @”Vodka”];  
  • 12. FMDB  Пример кода  // Выполняем запрос FMResultSet *rs = [db executeQuery: @"select coffeeID,coffeeName from coffee where coffeeID = ?", key]; // Забираем данные if ([rs next]) { NSString * name = [rs stringForColumn:@"coffeeName "]; }
  • 13. SQLite Persistent Objects  •  Еще одна обвертка над SQLite  •  Полнофункциональная ORM   •  Работа на уровне классов, а не на уровне  таблиц базы данных  •  За создание таблиц и зависимостей  отвечает библиотека  •  Полноценный SQL  (сложно составлять  вложенные запросы из‐за структуры базы) 
  • 14. SQLite Persistent Objects  Пример кода  #import "SQLitePersistentObject.h" // Всего пару строк, и у нас уже есть Entity @interface Coffee : SQLitePersistentObject { NSString *coffeeName; } @property (nonatomic, retain) NSString *coffeeName; @end
  • 15. SQLite Persistent Objects  Пример кода  // Открываем БД [[SQLiteInstanceManager sharedManager] setDatabaseFilepath:@”db.sqlite"]; // Создаем и сохраняем данные Coffee *newCoffee = [Coffee alloc] init]; newCoffee.coffeeName = @”Cognac"; [newCoffee save];
  • 16. SQLite Persistent Objects  Пример кода  Coffee * coffee = [Coffee findFirstByCriteria: @"WHERE coffeeName = ’Burn’"];  Кроме этого  • Поддержка связей один к одному, один ко многим,    много ко многим  • Поддержка transient свойств    • Возможность сохранения некоторых классов в базу    (UIImage, UIColor) 
  • 17. Core Data  Core Data  •  Framework из MacOS, в iPhone SDK с версии 3.0  •  Поддерживает три вида хранилищ данных ‐    Binary, inMemory, SQLite  •  Полнофункциональная ORM  •  Работа на уровне классов  •  Язык запросов похож на SQL  •  Графический интерфейс для редактирования  модели БД в Xcode  
  • 18. Core Data  Core Data  •  Поддержка операций undo/redo на графе  объектов  •  Эффективная работа с табличными  данными без полной загрузки их в память  •  Валидация объектов на этапе сохранения  •  Контроль версий модели БД 
  • 19. Core Data  Core Data. Создание модели  GUI  Или  Код  NSEntityDescription *runEntity =[[NSEntityDescription alloc] init]; [runEntity setName:@"Run"]; [runEntity setManagedObjectClassName:@"Run"]; [mom setEntities:[NSArray arrayWithObject:runEntity]]; NSAttributeDescription *dateAttribute = [[NSAttributeDescription alloc] init]; [dateAttribute setName:@"date"]; [dateAttribute setAttributeType:NSDateAttributeType]; [dateAttribute setOptional:NO]; NSExpression *lhs = [NSExpression expressionForEvaluatedObject]; NSExpression *rhs = [NSExpression expressionForConstantValue: [NSNumber numberWithInteger:0]]; NSPredicate *validationPredicate = [NSComparisonPredicate predicateWithLeftExpression:lhs rightExpression:rhs modifier:NSDirectPredicateModifier type:NSGreaterThanPredicateOperatorType options:0]; 
  • 20. Core Data  Core Data. Генерация классов  @interface Coffee: NSManagedObject { } @property (nonatomic, retain) NSString * coffeeName; @property (nonatomic, retain) NSString * country; @end @interface Coffee (CoreDataGeneratedAccessors) - (void)addCoffeeImageObject:(Image *)value; - (void)removeCoffeeImageObject:(Image *)value; - (void)addCoffeeImages:(NSSet *)value; - (void)removeCoffeeImage:(NSSet *)value; @end 
  • 21. Core Data  Core Data. Генерация классов  // Создаем Coffee * coffee = [NSEntityDescription insertNewObjectForEntityForName: [Coffee entityName] inManagedObjectContext:managedObjectContext]; coffee.coffeeName = @”Absinthe"; // и сохраняем данные NSError * error; if (![managedObjectContext save:&error]){ NSLog(@”Please don’t mix %@ with coffee : %@", [coffee description], [error userInfo]); }
  • 22. Core Data  Core Data. “Особенности”  •  Местами все еще «сырая» документация  •  Логические ошибки в базовых классах