【问题标题】:Reading a plist阅读 plist
【发布时间】:2011-12-28 19:29:25
【问题描述】:

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

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?

谢谢。

【问题讨论】:

    标签: macos cocoa plist


    【解决方案1】:

    第一层是数组,所以需要使用"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: 以获取该特定帐户的字典(如果您需要更多名称)。

    【讨论】:

      【解决方案2】:

      两件事:

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

        NSString *plistPath = @"~/Library/Preferences/com.apple.mail.plist";
        
      2. 您必须展开用户目录路径中的波浪号。 NSString 有一个方法。使用类似的东西

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

      【讨论】:

      • 好的,仍然。我得到的只是一个 NULL 值。
      • 好的,只需通过"MailAccounts.AccountName" 而不是"MailAccounts.Item 2.AccountName" 从属性列表中读取它。唯一的问题是MailAccounts 下还有Item 0Item 1。它们是空的,所以现在读取返回一个 NSString 作为 {null, null, email@email.com}。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-04
      相关资源
      最近更新 更多