3268807712 d9ca1cf0fa

Photo by : tswicegood

Xcode4で作ったplistが、従来のコードだと読めなくなっていたので、読めるコードを備忘録としてメモっておくます。

どうやら、plistが、NSArray型からNSDictionary型になっとるらしい。

NSString* path = [[NSBundle mainBundle] pathForResource:@"data" ofType:@"plist"]; 
NSArray *array = [NSArray arrayWithContentsOfFile:path];

Xcode3でつくったplistは上のコードで読めたのですが、Xcode 4からは、なんか<dict>が入るようになり読み込めなくなってました。

Xcode4でplistを作成すると、最上位階層が<dict>となるためだ。最上位階層がNSDictionaryとなるため、[NSArray arrayWithContentsOfFile:path]; では読み込めない。

引用元:xcode4におけるplistの読み込み時の注意: iPhoneアプリ開発備忘録

iPhoneアプリ開発備忘録さんの方法は、<dict>タグを削除するという方法なのですが、なぜか僕の場合上手くいかないのと、あんまし.plistを作ることもないから、削除しなければならないことを忘れてしまいそうなので、Xcode 4が作った.plistをそのまま読み込めるコードを書いてみました。

NSString* path = [[NSBundle mainBundle] pathForResource:@"data" ofType:@"plist"];
NSDictionary* dictionary = [NSDictionary dictionaryWithContentsOfFile:path];
NSArray *array = [NSArray arrayWithArray:[plist objectForKey:@"key"]];

まぁ、Xcode 4からplistは、NSArray型からNSDictionary型になってしまったので、いったんNSDictionaryで読んでから、NSArrayに置き換えているだけなんですけどね(;´∀`)

NSString* path = [[NSBundle mainBundle] pathForResource:@"data" ofType:@"plist"];
NSDictionary* dictionary = [NSDictionary dictionaryWithContentsOfFile:path];
NSString *str = [dictionary objectForKey:[plist objectForKey:@"key"]];

もちろん、plist内のkeyのtypeがNSString型だったりしたら、NSStringで読み込んでやればいいだけです。

なんか1行増えてしまうのがアレなんですけど、僕と同じ感じで困っていた方の参考になればこれ幸い。

【関連】UIAlertView+UITextField表示中に通知が来た場合、キーボードの裏に隠れてしまうバグの修正方法
【関連】先日書いた"はてブ数"をテキスト表示するJavaScriptがカッチョ悪かったのでシンプルに書きなおしてみた