plistの使い道
androidアプリケーションで便利な機能の一つに様々構造のxmlをデータソースとして使えることだ。例えばarrays.xmlは配列構造のデータをデータソースとして供給できる。
arrays.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="list_display"> <item>Item 1</item> <item>Item 2</item> <item>Item 3</item> </string-array> <string-array name="list_item"> <item>1</item> <item>2</item> <item>3</item> </string-array> </resources>
アプリケーションからアクセスするには以下のイディオムを使う(Contextスコープ中で)
String[] diplayNames = getResources().getStringArray(R.array.list_display); String[] listItems = getResources().getStringArray(R.array.list_item);
iOSにはarrays.xmlは無いが構造化されたデータとしてplistという形式を使用できる。
plistは(そうは見せていないが)中身はxmlファイルであり語彙の違いはあるものの、androidのarrays.xmlと同様の構造を使うことができるだろう。
Property List Programming Guide: Quick Start for Property Lists
arrays.plist
<?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"> <dict> <key>list_display</key> <array> <string>Item 1</string> <string>Item 2</string> <string>Item 3</string> </array> <key>list_item</key> <array> <string>1</string> <string>2</string> <string>3</string> </array> </dict> </plist>
リファレンスを読めば解るがplistで特徴的なのはXMLエレメントがほぼクラスにマップされていることだ。
一般的な型名 | XMLエレメント名 | マップされているCocoaクラス |
---|---|---|
配列 | NSArray | |
辞書 | NSDictionary | |
文字列 | NSString | |
データ | NSData | |
日付 | NSDate | |
数値-整数 | NSNumber(intValue) | |
数値-浮動小数 | NSNumber(floatValue) | |
ブール値 | NSNumber(boolValue==YES又はNO) |
読み出すコードはarrays.plistがメインバンドルに埋め込まれているとして、以下のようになるだろうか。
NSBundle* bundle = [NSBundle mainBundle]; NSString* path = [bundle pathForResource:@"arrays" ofType:@"plist"]; NSDictionary* dic = [NSDictionary dictionaryWithContentsOfFile:path]; NSArray* diplayNames =[dic objectForKey:@"list_display"]; NSArray* listItems = [dic objectForKey:@"list_item"];