squeek school #6
DESCRIPTION
TRANSCRIPT
Разработка приложений для iOS
squeek school
суббота, 21 мая 2011 г.
Хранение данных
• Xml (plist)
• SQLite
суббота, 21 мая 2011 г.
Хранение данныхProperty Lists
• Property Lists - для небольшого объема
• хранит обычные форматы данных iOSWriting an Array to DiskNSArray *array = [NSArray arrayWithObjects:@“Foo”, [NSNumber numberWithBool:YES], [NSDate dateWithTimeIntervalSinceNow:60], nil];[array writeToFile:@“MyArray.plist” atomically:YES];
<?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>
8Tuesday, February 2, 2010
NSArray * a = [NSArray arrayWithContentsOfFile:xmlFile];
суббота, 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)
15Tuesday, February 2, 2010
- добавления здесь!
- менять нельзя
!
суббота, 21 мая 2011 г.
путь к документамFile Paths in Your Application// Basic directoriesNSString *homePath = NSHomeDirectory();NSString *tmpPath = NSTemporaryDirectory();
// Documents directoryNSArray *paths = NSSearchPathForDirectoriesInDomains
(NSDocumentDirectory, NSUserDomainMask, YES);NSString *documentsPath = [paths objectAtIndex:0];
// <Application Home>/Documents/foo.plistNSString *fooPath =[documentsPath stringByAppendingPathComponent:@“foo.plist”];
16Tuesday, February 2, 2010
File Paths in Your Application// Basic directoriesNSString *homePath = NSHomeDirectory();NSString *tmpPath = NSTemporaryDirectory();
// Documents directoryNSArray *paths = NSSearchPathForDirectoriesInDomains
(NSDocumentDirectory, NSUserDomainMask, YES);NSString *documentsPath = [paths objectAtIndex:0];
// <Application Home>/Documents/foo.plistNSString *fooPath =[documentsPath stringByAppendingPathComponent:@“foo.plist”];
16Tuesday, February 2, 2010
суббота, 21 мая 2011 г.
SQLite!
• база в файле• нет сервера• простая реализация• включена в iPhone
суббота, 21 мая 2011 г.
7 шагов
• находим файл базы
• подключаемся - sqlite3_open
• создаем запрос
• готовим, проверяем - sqlite3_prepare_v2
• выполняем - sqlite3_step
• завершаем - sqlite3_finalize
• закрываем - sqlite3_close
суббота, 21 мая 2011 г.
шаг 0 - создать БД$ sqlite3 ex1SQLite version 3.6.11Enter ".help" for instructionsEnter 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!|10goodbye|20sqlite> 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 г.
подготовка
! 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];
! }!
#import <sqlite3.h>
суббота, 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
Twitter API
Facebook API
Twitter API
Яндекс Карты 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 г.
json
• NSDictionary *result = [jsonString JSONValue];
What does a JSON object look like?
{“instructor” : “Josh Shaffer”,“students” : 60,“itunes-u” : true,“midterm-exam” : null,“assignments” : [ “WhatATool”,
“HelloPoly”, “Presence” ]
}
41Tuesday, February 2, 2010
суббота, 21 мая 2011 г.
NSURLConnectionNSString *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 г.