際際滷
Submit Search
iOSハンズオントレ`ニング デ`タの喟A晒(SQLite3, NSUserDefaults)
?
1 like
?
1,381 views
寄消隠
Follow
iOSでデ`タを喟A議に隠贋する返粁として、SQLite3, NSUserDefaultsについて僥びます。
Read less
Read more
1 of 19
Download now
Download to read offline
More Related Content
iOSハンズオントレ`ニング デ`タの喟A晒(SQLite3, NSUserDefaults)
1.
iOSハンズオントレ`ニング デ`タの喟A晒(SQLite3, NSUserDefaults) ?寄消隠?
2.
SQLite3 アプリMみzみ喘のX楚RDB トランザクション ビュ` トリガ`
3.
聞ってみる SQLiteはタ`ミナルから軟咾靴泙后タ` ミナルを軟咾掘sqlite3と澣きます。 .helpと澣いてみよう。 K阻させます。.quitと澣いてみよう。
4.
DBを恬ってみる DBを旋喘するには、まずDBファイルを恬り、その嶄にさらに デ`タの秘れ麗にあたるテ`ブル┗蹌を恬撹します。 DBのファイルを恬るには、さっきのsqlite3に哈方でファイル兆を 局して軟咾垢襪海箸如DBファイルが恬撹されます。 DBファイル兆は、twitterDB.sqliteとしておきます。タ`ミナルで 仝sqlite3 sampleDB.sqlite々と澣きます。 仝.database々と澣き、恬撹されたDBを_Jします。
5.
テ`ブルを恬ってみる 肝のDDL(Data協x猟)をそのまま澣きます。 CREATE TABLE userinfo
(! 'ID' integer,! 'name' text! ); 仝.schema々と澣き、テ`ブルを_Jします。
6.
SQLiteのMみzみ xCodeのプロジェクトを_き、SQLite3のライブラリ歌孚を弖紗し ます。 ☆ベ`スとなるプロジェクトをダウンロ`ドしてください。 https:/ /github.com/ovjang/NoUseStoryBoard
7.
DBファイルの弖紗 枠ほど恬撹した、SQLiteのDBファイルをプロジェクトに弖紗します。瘁峰、アプリケ`ションバンドルファイルに紗えます。 !
8.
a怎 アプリケ`ションバンドルファイルとは iOSアプリケ`ションをビルドすると、Xcodeはアプリケ`ションをバンドルとしてパッケ`ジ晒します。バンドル とは、vBの あるリソ`スを1つの侭に鹿めた、ファイルシステム貧のディレクトリです。iOSアプリケ`ションのバンドルには、アプリケ` ションのg佩辛嬬ファイルと屶址喘リソ`スファイル┘▲廛螢羽`ションアイコン、鮫颯侫.ぅ襦▲踪`カライズされたコンテン ツなどが根まれています。 アプリケ`ションバンドルファイルは、iめるのか Documentsディレクトリは、嶷勣なユ`ザドキュメントやアプリケ` ションデ`タファイルを隠贋する栽に聞喘します。嶷勣なデ`タと は、ユ`ザが恬撹した秤鵑如▲▲廛螢羽`ションで伏撹し岷すことが できないもののことです。 このディレクトリの坪否は、ファイル慌嗤によりユ`ザからのアクセ スが辛嬬になります。このディレクトリの坪否はiTunesによってバッ クアップされます。 Libraryディレクトリの塘和には、O協ファイルなどを鯉{します。 Library/Preferencesの塘和に、NSUserDefaultsの秤鵑發海海鳳4罎 れます。
9.
DBのオ`プンクロ`ズ 仟、縫ラスを恬撹します。 sqlite3.hのインクル`ドします。 dbのハンドルを鯉{する、メンバ篳を協xします。 // // // sqlite3DB.h ! #import <Foundation/Foundation.h> #import <sqlite3.h> ! @interface
sqlite3DB : NSObject { sqlite3* db_; } ! -(void)dbOpen; -(void)dbClose; ! @end
10.
アプリのDocumentsフォルダのパスを函誼し、DBファイル兆を根めたフォルダのフルパスを函誼します。 Documentsフォルダに、DBファイルが贋壓するかチェックし、なければアプリケ`ションバンドル坪のDB ファイルをコピ`します。 ファイル ふぁいる ☆兜指のみg佩される。アプリのバ`ジョンアップrにも、貧きされない。デ`タは火ることに廣吭。 // // // sqlite3DB.m ! #import "sqlite3DB.h" ! @implementation sqlite3DB ! -(void)dbOpen
{ // デ`タベ`スファイルを鯉{するために、Documentsフォルダ`を函誼します。 NSString* docs_path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; // デ`タベ`スファイルのパスを函誼します。 NSString* database_path = [NSString stringWithFormat:@"%@/%@", docs_path, @"sampleDB.sqlite"]; // Documentsフォルダ`にデ`タベ`スファイルが贋壓しているかを_Jします。 ! NSFileManager* manager = [NSFileManager defaultManager]; if (![manager fileExistsAtPath:database_path]) { NSError* error = nil; // Documentsフォルダ`に贋壓しない栽は、デ`タベ`スの}u圷をバンドルから函誼します。 NSString* template_path = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:database_filename]; // アプリケ`ションバンドルから函誼したデ`タベ`スファイルを猟フォルダ`にコピ`します。 if (![manager copyItemAtPath:template_path toPath:database_path error:&error]) { // デ`タベ`スファイルのコピ`に払,靴栽のI尖です。 } }
11.
DBファイルのパスを峺協し、DBをオ`プンします。DBのハンドルを函 誼します。 ついでに、DBをcloseするメソッドをg廾します。 ??? ??? ??? ! // 猟フォルダ`に喘吭されたデ`タベ`スファイルを_きます。 if (sqlite3_open([database_path
UTF8String], &db_) != SQLITE_OK) { // デ`タベ`スファイルを SQLite で_くことに払,靴泙靴拭 } } ! ! -(void)dbClose { NSLog(@"DB Close"); if (db_) { // DB Close sqlite3_close(db_); } db_ = nil; } @end ☆歌深?Sqlite3のv方リファレンス?http:/ /www.sqlite.org/c3ref/funclist.html
12.
恬撹したクラスを聞い、DBのオ`プン?クロ`ズを佩います。 - (void)viewDidLoad { [super viewDidLoad]; sqlite3DB
*sqlite3 = [sqlite3DB new]; [sqlite3 dbOpen]; [sqlite3 dbClose]; }
13.
テ`ブルに、鯣襪譴 SQLを恬撹し、並念にコンパイルしておきます。 sqlite3_stmt* statementInsert_; ! -(BOOL)prepareSQL { //
SQL猟 NSString* insertSQL = @"insert into userinfo values (?, ?)"; // SQLのコンパイル if(sqlite3_prepare_v2(db_, [insertSQL UTF8String], -1, &statementInsert_, NULL) != SQLITE_OK) { NSLog( @"Failed to prepare statement with '%s'.", sqlite3_errmsg( db_ )); return NO; } return YES; } コンパイルしたSQLに、鯊颪痾zみg佩します。 -(BOOL)usersInfoInsert:(int)id name:(NSString*)name { // バインド篳のリセット sqlite3_reset(statementInsert_); // バインド篳に、離札奪 sqlite3_bind_int(statementInsert_, 1, id); sqlite3_bind_text(statementInsert_, 2, [name UTF8String], -1, SQLITE_TRANSIENT); // SQLg佩 int wasSucceeded = sqlite3_step(statementInsert_); if( wasSucceeded != SQLITE_DONE ) { NSLog( @"Failed to insert from database with '%s'.", sqlite3_errmsg( db_ )); return NO; } return YES; }
14.
コンパイルしたSQLを篤します。 -(void)finalizeSQL { if (db_)
{ // PREPAREgみSTATEMENTの sqlite3_finalize(statementInsert_); } } 恬撹したメソッドを聞い、テ`ブルに、Insertします。 - (void)viewDidLoad { [super viewDidLoad]; sqlite3DB *sqlite3 = [sqlite3DB new]; [sqlite3 dbOpen]; ! ! } [sqlite3 [sqlite3 [sqlite3 [sqlite3 prepareSQL]; usersInfoInsert:1 name:@"name1"]; usersInfoInsert:2 name:@"name2"]; finalizeSQL]; [sqlite3 dbClose];
15.
テ`ブルの嶄附を歌孚する -(void)userInfoSelect { // k佩するSQL NSString*
selectSQL = [NSString stringWithFormat:@"select * from userinfo"]; // SQLのコンパイル sqlite3_stmt *statement = nil; if(sqlite3_prepare_v2(db_, [selectSQL UTF8String], -1, &statement, NULL) == SQLITE_OK) { @try { int wasSucceeded = 0; // 肝の佩が贋壓するr、り、SQLITE_ROWを卦抜する。ないとき、SQLITE_DONEを卦抜する。 do { // SQLのg佩(1佩iみzみ) wasSucceeded = sqlite3_step(statement); if (wasSucceeded == SQLITE_ROW) { // 嶄附のiみ函り NSLog(@"%d,%@", (int)sqlite3_column_int(statement, 0), [NSString stringWithUTF8String:(char*)sqlite3_column_text(statement, 1)] ); } else if(wasSucceeded == SQLITE_DONE) { //iみ俳り } else { return; } } while (wasSucceeded == SQLITE_ROW); } @finally { // PREPAREgみSTATEMENTの sqlite3_finalize(statement); } } else { // PREPARE払 return; } return; }
16.
恬撹したメソッドを聞い、テ`ブルをSelectします。 - (void)viewDidLoad { [super viewDidLoad]; sqlite3DB
*sqlite3 = [sqlite3DB new]; [sqlite3 dbOpen]; ! [sqlite3 [sqlite3 [sqlite3 [sqlite3 prepareSQL]; usersInfoInsert:1 name:@"name1"]; usersInfoInsert:2 name:@"name2"]; finalizeSQL]; [sqlite3 userInfoSelect]; [sqlite3 dbClose]; }
17.
NSUserDefaults O協秤鵑覆匹髻隠贋する喘余に聞う きzみ、iみzみ、茅の荷恬ができる 侏ごとに荷恬のメソッドがある。
18.
iみきのメソッド Getting Default Values 1.
C?arrayForKey: 2. C?boolForKey: 3. C?dataForKey: 4. C?dictionaryForKey: 5. C?floatForKey: 6. C?integerForKey: 7. C?objectForKey: 8. C?stringArrayForKey: 9. C?stringForKey: 10. C?doubleForKey: 11. C?URLForKey: Setting Default Values 1. 2. 3. 4. 5. 6. C?setBool:forKey: C?setFloat:forKey: C?setInteger:forKey: C?setObject:forKey: C?setDouble:forKey: C?setURL:forKey: Removing Defaults 1. C?removeObjectForKey:
19.
NSUserDefaultsの聞い圭 // UserDefaultsの函誼 ! NSUserDefaults *userDefault
= [NSUserDefaults standardUserDefaults]; // 函誼 // NSUserDefaultsに隠贋?厚仟する [userDefault setInteger:1 forKey:@"ID"]; // int侏 [userDefault setObject:@"NAME1" forKey:@"NAME"]; // Object侏 // NSUserDefaultsからデ`タをiみzむ int id = [userDefault integerForKey:@"ID"]; // int侏として函誼 NSString* name = [userDefault stringForKey:@"NAME"]; NSLog(@"%d,%@",id,name); // NSString侏として函誼
Download