Plistには、コードで使用するための個別の「形式」がありません(この質問はそのままでは意味がありません)。1.これらの値で辞書を初期化するObjective-Cコードを生成するか、2。ファイルを使用して辞書を初期化します。
NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:@"UIPhoneFormats.plist"];
編集:つまり、同じ辞書を再現するObjective-Cコードを生成する必要があります。このためには、辞書の内容をフォーマットされた方法で再印刷する必要があります。次のようなプログラムを作成できます。
#import <stdio.h>
#import <Foundation/Foundation.h>
NSString *recursiveDump(id object)
{
if ([object isKindOfClass:[NSString class]]) {
return [NSString stringWithFormat:@"@\"%@\"", object];
} else if ([object isKindOfClass:[NSNumber class]]) {
return [NSString stringWithFormat:@"@%@", object];
} else if ([object isKindOfClass:[NSArray class]]) {
NSMutableString *str = [NSMutableString stringWithString:@"@["];
NSInteger size = [object count];
NSInteger i;
for (i = 0; i < size; i++) {
if (i > 0) [str appendString:@", "];
[str appendString:recursiveDump([object objectAtIndex:i])];
}
[str appendString:@"]"];
return str;
} else if ([object isKindOfClass:[NSDictionary class]]) {
NSMutableString *str = [NSMutableString stringWithString:@"@{"];
NSString *key;
NSInteger size = [object count];
NSArray *keys = [object allKeys];
NSInteger i;
for (i = 0; i < size; i++) {
if (i > 0) [str appendString:@", "];
key = [keys objectAtIndex:i];
[str appendFormat:@"%@: %@", recursiveDump(key), recursiveDump([object objectForKey:key])];
}
[str appendString:@"}"];
return str;
} else {
// feel free to implement handling NSData and NSDate here,
// it's not that straighforward as it is for basic data types.
}
}
int main(int argc, char *argv[])
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:@"UIPhoneFormats.plist"];
NSMutableString *code = [NSMutableString stringWithString:@"NSDictionary *dict = "];
[code appendString:recursiveDump(dict)];
[code appendString:@";"];
printf("%s\n", [code UTF8String]);
[pool release];
return 0;
}
このプログラムは、提供されたプロパティリストからObjective-C初期化コードを生成します(構文エラーがないことを願っています)。これは、プロジェクトにコピーして貼り付けて使用できます。
編集: OPが提供したplistファイルのストリップバージョンでプログラムを実行すると(元のファイルが大きすぎるため、少しカットしました)、次のコードが生成されました。
NSDictionary *dict = @{@"at": @[@"+43 1 ########", @"+43 ############", @"01 ########", @"00 $"], @"ar": @[@"+54## #### ####", @"## #### ####", @"00 $", @"18 ### $ "]};
それが本当に有効であることを確認するためにint main()
、これを「test.m」というファイルの途中に貼り付けたので、次のプログラムを入手しました。
#import <Foundation/Foundation.h>
int main()
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSDictionary *dict = @{@"at": @[@"+43 1 ########", @"+43 ############", @"0$
NSLog(@"%@", dict);
[pool release];
return 0;
}
確認するために、私は走っclang -o test test.m -lobjc -framework Foundation
て驚き、驚きます:
機能した。
編集2:これをコマンドラインユーティリティにしました。これは、今後の作業を容易にするためです。これは将来役立つ可能性があります。Plist2ObjC
お役に立てれば。