squeek school #6

19
Разработка приложений для iOS squeek school суббота, 21 мая 2011 г.

Upload: sergey-pronin

Post on 18-Jan-2015

4.420 views

Category:

Education


0 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Squeek school #6

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

squeek school

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

Page 2: Squeek school #6

Хранение данных

• Xml (plist)

• SQLite

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

Page 3: Squeek school #6

Хранение данных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 г.

Page 4: Squeek school #6

Хранение данныхв настройках

[[NSUserDefaults standardUserDefaults] setObject: ForKey:];

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

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

Page 5: Squeek school #6

песочница

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

Page 6: Squeek school #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)

15Tuesday, February 2, 2010

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

- менять нельзя

!

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

Page 7: Squeek school #6

путь к документам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 г.

Page 8: Squeek school #6

SQLite!

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

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

Page 9: Squeek school #6

7 шагов

• находим файл базы

• подключаемся - sqlite3_open

• создаем запрос

• готовим, проверяем - sqlite3_prepare_v2

• выполняем - sqlite3_step

• завершаем - sqlite3_finalize

• закрываем - sqlite3_close

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

Page 10: Squeek school #6

шаг 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 г.

Page 11: Squeek school #6

подготовка

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

Page 12: Squeek school #6

чтение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 г.

Page 13: Squeek school #6

запись

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

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

Page 14: Squeek school #6

Сетевая активность приложения

• GET/POST запросы

• NSURLRequest и NSURLConnection

• Защищенное соединение• Парсинг xml

• Работа с публичными API

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

Page 15: Squeek school #6

Google Maps API

Twitter API

Facebook API

Twitter API

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

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

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

Page 16: Squeek school #6

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

Page 17: Squeek school #6

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

Page 18: Squeek school #6

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

Page 19: Squeek school #6

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