我正在尝试阅读〜/ 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?
感谢。
答案 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)
两件事:
您不希望或不需要使用NSBundle
来获取文件的路径。该文件位于应用程序包之外。所以你应该有
NSString *plistPath = @"~/Library/Preferences/com.apple.mail.plist";
您必须在用户目录的路径中展开代字号。 NSString
有一个方法。使用像
NSString *plistPath = [@"~/Library/Preferences/com.apple.mail.plist" stringByExpandingTildeInPath];