2009年8月15日土曜日

「第11章データの保存」のSQLiteサンプルを走らせる

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
入手したサンプルコードをビルド(フォルダ: 11 Persistence SQLite) 。

iPhoneシミュレータで動作を確認。入力した文字列が次回起動時にも反映されている。



ソースコードをざっと確認する。
PersistenceViewController

まず起動時に viewDidLoad が呼出される。
- (void)viewDidLoad
 ・SQLite DB にテーブルを作成 (CREATE TABLE)
 ・保存してあった文字列を取得(SELECT)し、UITextFieldへ設定
 ・UIApplicationWillTerminateNotification を登録


DBから取得した文字列を UITextFieldへ設定するのに KVCを使っている。
            NSString *fieldName = [[NSString alloc]
initWithFormat:@"field%d", row];
NSString *fieldValue = [[NSString alloc]
initWithUTF8String:rowData];
UITextField *field = [self valueForKey:fieldName];


fieldNameは "field1", "field2" , ...となりプロパティ名と一致する。これを使い valueForKey で UITextFieldのインスタンスを取得している。


終了時。
- (void)applicationWillTerminate:(NSNotification *)notification
 ・INSER OR REPACE 文を使い文字列を DBへ格納
 ・DBをCLOSE


後始末
- (void)viewDidUnload {
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
self.field1 = nil;
self.field2 = nil;
self.field3 = nil;
self.field4 = nil;
[super viewDidUnload];
}




SQLite ファイルはどこに書き出されているのか。デバッガコンソールへ出力してみる。
- (NSString *)dataFilePath {
NSArray *paths = NSSearchPathForDirectoriesInDomains(
NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSLog(@"%@", documentsDirectory); // デバッガコンソールへディレクトリを表示
return [documentsDirectory stringByAppendingPathComponent:kFilename];
}


結果。
2009-08-15 06:16:30.345 Persistence[1509:20b] /Users/hashi/Library/Application Support/iPhone Simulator/User/Applications/C5128B12-58D5-4873-A224-781256D016BA/Documents




なるほど。



気がついた点が1つ。IBOutlet は @property でも記述できるのか。
@interface PersistenceViewController : UIViewController {
UITextField *field1;
:
}
@property (nonatomic, retain) IBOutlet UITextField *field1;



参考本:はじめてのiPhoneプログラミング

0 件のコメント:

コメントを投稿