FC2ブログ

plist(XML形式)ファイルの取り扱い

iPhone SDKでxml形式のファイルを取り扱ってみようと思います。
アプリの設定だったり必要な情報を保持したり、使う機会は多々あるのではないでしょうか。

以下のようなXML構造を想定してみます。
<person>
<age>20</age>
<firstName>Tarou</firstName>
<lastName>Yamada</lastName>
</person>
<person>
(省略)
</person>
(以下省略)

XML形式のファイルはプロパティリスト(*.plist)で作成します。
※XMLファイルの作成、Objective-Cからの読み込み&書き込みが非常に簡単に行えたのでこの形式を選びました。
※NSXMLParserというクラスも存在していますが今回は触れません。

1. plistファイルの作成。
Resourcesフォルダを右クリックし、追加→新規ファイル...を選択。
左メニューからOtherを選択しProperty Listを選択する。
ピクチャ 6
ファイル名をpersonsとして保存。

2. plistファイルに要素を追加。
persons.plistファイルを「XML Property List」形式で開く。
※デフォルトで上記形式だと思います。

複数のperson情報を扱うため、RootのTypeをArrayに変更します。
Rootを選択している状態で列右端のボタンをクリックすると、
ピクチャ 2

Rootに子要素が追加されます。
ピクチャ 3

複数の要素(年齢、姓、名)を扱うためTypeをDictionaryに変更します。
ピクチャ 4

Item1要素に子要素を追加します。
Item1の横の三角矢印をクリックし、矢印を下に向けます。
矢印を下に向けることで子要素を追加することができるようになります。
※列右端のボタンが「+」から「列を挿入する」ようなアイコンに変わっています。
ピクチャ 5

XMLの要素と値を設定しplistファイルを保存します。
ピクチャ 6

3. plistファイルの読み込み。
NSBundle* bundle = [NSBundle mainBundle];
NSString* path = [bundle pathForResource:@"persons" ofType:@"plist"];
NSArray* persons = [NSArray arrayWithContentsOfFile:path];


for(NSDictionary* person in persons) {
NSLog(@"age:%@", [person objectForKey:@"age"]);
NSLog(@"firstName:%@", [person objectForKey:@"firstName"]);
NSLog(@"lastName:%@", [person objectForKey:@"lastName"]);
}

最初3行でplistファイルの情報を読み込んでいます。
for文は参考までにpersonの子要素の値をログに出力し、値が正しく取得できているかどうか確認しています。
plistファイル作成時にRoot要素の型をArrayに変更しているので3行目もNSArrayで受け取っています。
同様にpersons一覧に格納されているオブジェクトはNSDictionaryで受け取ります。

4. plistファイルの書き込み。
persons.plistで保持している2人分の情報にコードから1人分の情報を追加してplistファイルを保存します。
先ずはplistファイルから情報を読み込みます。
ただし、読み込んだ情報一覧に1人分の情報を追加するので可変型のArrayクラスを使います。
NSBundle* bundle = [NSBundle mainBundle];
NSString* path = [bundle pathForResource:@"persons" ofType:@"plist"];
NSMutableArray* persons = [NSMutableArray arrayWithContentsOfFile:path];

一覧に追加する情報を作成します。
NSMutableDictionary* person = [[NSMutableDictionary alloc]init];
[person setObject:[NSNumber numberWithInt:12] forKey:@"age"];
[person setObject:@"Kato" forKey:@"firstName"];
[person setObject:@"Saburo" forKey:@"lastName"];

作成した情報を一覧に追加し、ファイルに保存します。
NSArrayオブジェクトで保持している情報をwriteToFileメソッドで指定したパスに書き込みます。
[persons addObject:person];
[persons writeToFile:path atomically:YES];

以下の通り追加されています。
ピクチャ 1

ソースを開くと以下の通り。
ピクチャ 2

ただし、ここで保存されたplistファイルはResourcesディレクトリに作成したものとは異なります。
※Resourcesディレクトリに作成したplistファイルの内容は変わりません。
どこのplistファイルが保存されたかというと、
/Users/アカウント名/Library/Application Support/iPhone Simulator/User/Applications/APP_UUID/PList.app/persons.plist
私の環境(環境といってもデフォルト設定のままですが)だとここに保存されています。
アプリケーションのデプロイ先みたいなものでしょうか、多分。
APP_UUIDはビルド毎に値が変わるみたいです。
プロジェクト名がPListなのでPlist.appという名前になっています。
appファイルは右クリック→「パッケージに内容を表示」で中身を見れます。
デプロイ先のパスが都度変わるのでシミュレータでテストする際はちょっと面倒そうですね。


以上です。
plistを使ったXML形式ファイルの読み書きは非常にシンプルで良い感じです。
参考になれば幸いです。
スポンサーサイト



COMMENT

Name
E-mail
URL
Comment
Pass  *
Secret? (管理者にだけ表示)
このコメントは管理者の承認待ちです
  • #
  • 2011.01.26(Wed)
  • Edit
このコメントは管理者の承認待ちです
  • #
  • 2012.11.21(Wed)
  • Edit
このコメントは管理者の承認待ちです
  • #
  • 2013.01.24(Thu)
  • Edit
このコメントは管理者の承認待ちです
  • #
  • 2014.01.29(Wed)
  • Edit
このコメントは管理者の承認待ちです
  • #
  • 2014.07.31(Thu)
  • Edit
このコメントは管理者の承認待ちです
  • #
  • 2014.08.12(Tue)
  • Edit
このコメントは管理者の承認待ちです
  • #
  • 2014.08.14(Thu)
  • Edit
このコメントは管理者の承認待ちです
  • #
  • 2014.08.17(Sun)
  • Edit
このコメントは管理者の承認待ちです
  • #
  • 2014.08.22(Fri)
  • Edit
このコメントは管理者の承認待ちです
  • #
  • 2014.08.22(Fri)
  • Edit
このコメントは管理者の承認待ちです
  • #
  • 2014.09.04(Thu)
  • Edit