2011-12-28 7 views
1

〜/ Library/Preferences/com.apple.mail.plist(Snow Leopard上)を読んで、aboutダイアログに入るための電子メールアドレスとその他の情報を取得しようとしています。私は明らかに間違っている次のコードを、使用しています:plistを読む

NSBundle* bundle; 
bundle = [NSBundle mainBundle]; 
NSString *plistPath = [bundle pathForResource:@"~/Library/Preferences/com.apple.mail.plist" ofType:@"plist"]; 
NSDictionary *plistData = [NSDictionary dictionaryWithContentsOfFile:plistPath]; 
NSString *item = [plistData valueForKeyPath:@"MailAccounts.Item 2.AccountName"];  


NSLog(@"Result = %@", item); 

はまた、私は読む必要が値がMailAcounts -> Item 2 -> AccountNameだと私は私が(原因Item 2キーのスペースに)これを正しくやっていることを確認していません。

アップルの開発者用ガイドをplistファイルに読み込もうとしましたが、ヘルプはありませんでした。

plistを読み込んで値をNSStringとして抽出するにはどうすればよいですか?

ありがとうございました。

答えて

2

最初のレベルの配列があるようなものを使用します。

また
NSString *plistPath = [@"~/Library/Preferences/com.apple.mail.plist" stringByExpandingTildeInPath]; 
NSDictionary *plistData = [NSDictionary dictionaryWithContentsOfFile:plistPath]; 
NSArray *item = [plistData valueForKeyPath:@"MailAccounts.AccountName"]; 
NSLog(@"Account: %@", [item objectAtIndex:2]); 

あなたがキーで移動してから配列を引き出すことができます"MailAccounts"最初にvalueForKey:(これはNSArray*が得られます)とobjectAtIndex:を使って、その特定のアカウントの辞書を取得します(名前よりも必要な場合に便利です)。

+0

情報とコードのサンプルをありがとう。 –

1

2つのこと:

  1. あなたはしたいまたはファイルへのパスを取得するにはNSBundleを使用する必要はありません。ファイルはアプリケーションバンドルの外側にあります。だからあなたはちょうど持っている必要があります

    NSString *plistPath = @"~/Library/Preferences/com.apple.mail.plist"; 
    
  2. あなたは、ディレクトリ内のチルダを展開する必要があります。 NSStringは、このための方法を有する。あなたが"MailAccounts.AccountName"を使用してNSArray*として扱う必要があるので、

    NSString *plistPath = [@"~/Library/Preferences/com.apple.mail.plist" stringByExpandingTildeInPath]; 
    
+0

OKですが、私が得るのはNULL値です。 –

+0

「MailAccounts.Item 2.AccountName」ではなく、単に「MailAccounts.AccountName」でプロパティリストから読み取るようにしました。唯一の問題はMailAccountsの下に 'Item 0'と' Item 1'があることです。それらはnullなので、読みはNSStringを{null、null、[email protected]}として返します。 –

関連する問題