Hatena::Groupiphone-dev

iPhoneアプリ開発まっしぐら★ このページをアンテナに追加 RSSフィード

引っ越し後の日記はコチラです

tokoromのその他の日記

2009-05-20

NSUserDefaultsはどこまで保存できるかチェック(1)

12:17 | はてなブックマーク - NSUserDefaultsはどこまで保存できるかチェック(1) - iPhoneアプリ開発まっしぐら★

NSUserDefaultsでどんなオブジェクトを保存できるのかを後学のために試しておきました。

このエントリでは文字列〜コレクションまで単純なオブジェクトの保存に留めます。

クラスの保存等は次のエントリで。



デモンストレーション

まずは簡単な文字列、数値を試してみます。

書き込み
  NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];

  // NSStringの保存
  [defaults setObject:@"NSString" forKey:@"STRING"];

  // NSString(日本語)の保存
  [defaults setObject:@"日本語です♪" forKey:@"JAPANESE_STRING"];

  // Integerの保存
  [defaults setInteger:555 forKey:@"INTEGER"];

  if ( ![defaults synchronize] ) {
    NSLog( @"failed ..." );
  }
読み込み
  NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];

  // NSStringの読み込み試験
  NSString* string = [defaults stringForKey:@"STRING"];
  NSLog( string );

  // NSString(日本語)の読み込み試験
  NSString* japaneseString = [defaults stringForKey:@"JAPANESE_STRING"];
  NSLog( japaneseString );

  // Integerの読み込み試験
  int integer = [defaults integerForKey:@"INTEGER"];
  NSLog( @"%d", integer );
実行結果
 NSString
 日本語です♪
 555

問題なくいけました。

はじめっからこんなクラスが用意されてるってのは楽ちんですね。



日付データとバイナリデータ

次はNSDateとNSDataの保存を確認します。

書き込み
  NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];

  // NSDateの保存
  NSDate* date = [NSDate date];
  [defaults setObject:date forKey:@"DATE"];

  // NSDataの保存
  NSData* data = [NSData dataWithBytes:"bytes" length:5];
  [defaults setObject:data forKey:@"DATA"];

  if ( ![defaults synchronize] ) {
    NSLog( @"failed ..." );
  }
読み込み
  NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];

  // NSDateの読み込み試験
  NSDate* date = [defaults objectForKey:@"DATE"];
  NSLog( [date description] );

  // NSDataの読み込み試験
  NSData* data = [defaults dataForKey:@"DATA"];
  NSString* dataString = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease];
  NSLog( dataString );
実行結果
 2009-05-20 11:42:38 +0900
 bytes

NSDateはdateForKeyってのが無いのでobjectForKeyで読み込みます。

NSDataはそのままdataForKeyで。



コレクション

最後にNSArrayとNSDictionaryを。

書き込み
  NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];

  // NSArrayの保存
  NSMutableArray* array = [NSMutableArray array];
  [array addObject:@"an object for array 1"];
  [array addObject:@"an object for array 2"];
  [array addObject:@"an object for array 3"];
  [defaults setObject:array forKey:@"ARRAY"];

  // NSDictionaryの保存
  NSMutableDictionary* dictionary = [NSMutableDictionary dictionary];
  [dictionary setObject:@"an object for dictionary 1" forKey:@"DIC1"];
  [dictionary setObject:@"an object for dictionary 2" forKey:@"DIC2"];
  [defaults setObject:dictionary forKey:@"DICTIONARY"];

  if ( ![defaults synchronize] ) {
    NSLog( @"failed ..." );
  }
読み込み
  NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];

  // NSArrayの読み込み試験
  NSArray* array = [defaults arrayForKey:@"ARRAY"];
  for ( NSString* object in array ) {
    NSLog( object );
  }

  // NSDictionaryの読み込み試験
  NSDictionary* dictionary = [defaults dictionaryForKey:@"DICTIONARY"];
  for ( NSString* object in dictionary ) {
    NSLog( object );
  }
実行結果
 an object for array 1
 an object for array 2
 an object for array 3
 DIC1
 DIC2

これも専用の読み込みメソッドがあるのでそのままいけますね。

楽ちん♪


次のエントリで独自Classや、NSArrayの入れ子構造の書き込み&読み込みを試します

あまもりあまもり2012/07/26 10:53NSMutableArrayの保存方法を探していたので、大変参考になりました。
そして、みたことがある犬のプロフ写真だと思ったら、「iPhoneプログラミング UIKit詳解リファレンス」を愛読してました。
素人プログラマーの私には一番わかりやすい解説書で重宝させていただいております。
ありがとうございました。