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>