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 件のコメント:
コメントを投稿