读一个plist

时间:2011-12-28 19:29:25

标签: macos cocoa plist

我正在尝试阅读〜/ Library / Preferences / com.apple.mail.plist(在Snow Leopard上)获取电子邮件地址和其他信息以进入about对话框。我正在使用以下代码,这显然是错误的:

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键中的空格)。

我尝试阅读Apple的plist文件开发人员指南但没有帮助。

如何读取plist并将值提取为NSString?

感谢。

2 个答案:

答案 0 :(得分:2)

第一级是一个数组,因此您需要使用"MailAccounts.AccountName"并将其视为NSArray*

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:从{{1}}拉出数组以获取该特定字典帐户(如果您需要的不仅仅是名称,则非常有用)。

答案 1 :(得分:1)

两件事:

  1. 您不希望或不需要使用NSBundle来获取文件的路径。该文件位于应用程序包之外。所以你应该有

    NSString *plistPath = @"~/Library/Preferences/com.apple.mail.plist";
    
  2. 您必须在用户目录的路径中展开代字号。 NSString有一个方法。使用像

    这样的东西
    NSString *plistPath = [@"~/Library/Preferences/com.apple.mail.plist" stringByExpandingTildeInPath];