iPhoneアプリ作成(8) 配列の保存と読み込みについて
「こんなことできるんだ。」ちょっと感動しました。
なんと、「配列をXMLファイルに保存・復元」できる。
知らなかったー ショック!!
配列は、Array,Dictionaryの混在で複数の階層でも大丈夫。
テストでは4階層の配列をためしてみた。
delphiやその他の言語で、こんなことできたのかな??????????
正直、これまでデータベースばかり扱ってたので、配列の保存は試したことがなかった
こんな簡単に、保存と復元ができると、いろいろと応用がきくかも...
◆注意点:
delphiでよくやるパターンで、オリジナルのクラスを作って、配列に追加するようなことをやると、この保存・読み込みはできません。
あくまで、ArrayとDictionaryの組み合わせで構成されている配列(コレクション)だけをサポートしてるようです。
◆テストソース
//***************************************************
//? Array - Array - dic - Array テスト
//***************************************************
#import <Foundation/Foundation.h>
? int main (int argc, constchar * argv[]) {
? NSAutoreleasePool * pool = [[NSAutoreleasePoolalloc] init];
? //init 空の配列を生成
? NSMutableArray *array0 = [NSMutableArray array];
? NSMutableArray *array1 = [NSMutableArray array];
? NSMutableDictionary *dic1 = [NSMutableDictionary dictionary];
? NSMutableArray *array2 = [NSMutableArray array];
NSMutableArray *array3 = [NSMutableArray array];
? //add 配列に値を設定
? [dic1 setObject:@"test1" forKey:@"key1"];
? [array2 addObject:@"test2"];
? [dic1 setObject:array2?? forKey:@"key2"];
? [array1 addObject:dic1];
? [array0 addObject:array1];
? NSLog(@"array0 = %@",array0);
? //save 保存
? BOOL ret;
? NSString *path = @"/Users/administrator/Documents/test.plist";
? ret =[array0 writeToFile:path atomically:YES];
? //load 読み込み
? array3 = [NSArray arrayWithContentsOfFile:path];
? NSLog(@"array3 = %@",array3);
? [pool drain];
? return0;
}
◆結果
2011-03-09 10:35:25.195 CollectionTest03[29286:a0f] array0 = ( ??????? ( ??????????????? { ??????????? key1 = test1; ??????????? key2 =???????????? ( ??????????????? test2 ??????????? ); ??????? } ??? ) ) 2011-03-09 10:35:25.208 CollectionTest03[29286:a0f] array3 = ( ??????? ( ??????????????? { ??????????? key1 = test1; ??????????? key2 =???????????? ( ??????????????? test2 ??????????? ); ??????? } ??? ) )
◆出力されたplistファイル(XMLファイル)
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <array> ???? <array> ????????? <dict> ?????????????? <key>key1</key> ?????????????? <string>test1</string> ?????????????? <key>key2</key> ?????????????? <array> ??????????????????? <string>test2</string> ?????????????? </array> ????????? </dict> ???? </array> </array> </plist>