Чтение Плиста - PullRequest
       15

Чтение Плиста

1 голос
/ 28 декабря 2011

Я пытаюсь прочитать ~ / 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 ]

2 голосов
/ 29 декабря 2011

Первый уровень - это массив, поэтому вам нужно использовать "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 голос
/ 28 декабря 2011

Две вещи:

  1. Вы не хотите или не должны использовать NSBundle, чтобы получить путь к файлу.Файл находится вне пакета приложения.Таким образом, вы должны просто иметь

    NSString *plistPath = @"~/Library/Preferences/com.apple.mail.plist";
    
  2. Вы должны расширить тильду в пути к каталогу пользователя.NSString имеет метод для этого.Используйте что-то вроде

    NSString *plistPath = [@"~/Library/Preferences/com.apple.mail.plist" stringByExpandingTildeInPath];
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...