/var/log/seiji

29 Nov 2008

NSUserDefaultsでのデータ保存-CS193P

NSUserDefaultsでのデータ保存

Lecture6の内容にあたります。前回のHelloPolyプロジェクトを拡張します。今回はアプリケーションの終了・起動時にデータを保存・読込みを行います。具体的にはPolygonの辺の数を保存します。データが存在した場合はその数を使い描画を行います。
CS193P - Cocoa Programming | Announcements.jpg
iPhone Application Programming

今迄、作成したソースはhttp://public.me.com/seijit/iPhone/CS193Pから

xcode.pngデータの保存

今回は値が変化したタイミングではなく、アプリケーションが終了した時のみ、データの保存を行います。

MyUIViewController

ViewControllerの中でアプリケーション終了時に呼び出されるメソッドを作成します。

MyUIViewController.h
`- (void)willTerminate:(UIApplication *)application;`
MyUIViewController.m
-(void)willTerminate:(UIApplication *)application {
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setInteger:polygon.numberOfSides forKey:NUMBER_OF_SIDES];
}

HelloPolyAppDelegate

HelloPolyAppDelegateでapplicationWillTerminate:を実装し、その中でMyUIViewController::willTerminate:をCallします。

HelloPolyAppDelegate.m
- (void)applicationWillTerminate:(UIApplication *)application {
    [myUIViewController willTerminate:application];
}

picture.pngデータの読込み

アプリケーション起動時に読込むコードを追加します。

MyUIViewController

MyUIViewControllerでviewDidLoad:のメソッド中にコードを追加します。

MyUIViewController.m
- (void)viewDidLoad {
    [polygon setMinimumNumberOfSides:3];
    [polygon setMaximumNumberOfSides:12];
    // NSUserDefaults Loading
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    int num = [defaults integerForKey:NUMBER_OF_SIDES];
    if(num == 0) {
        [polygon setNumberOfSides:numberOfSidesLabel.text.integerValue];
    } else {
        [polygon setNumberOfSides:num];
    }
    myUIView.polygon = polygon;
    [self updateInterface];
    [super viewDidLoad];
}

値を変えて終了した後、再度起動するとその値が保存されて、描画されるのがわかります。
iPhone シミュレータ-1.jpg

今回作成したソースは http://public.me.com/seijit/iPhone/CS193P/Lecture6のHelloPoly4.tar.gzです。

Comments

comments powered by Disqus