Восстановление BOOL внутри NSDictionary из файла plist - PullRequest
36 голосов
/ 29 сентября 2010

У меня есть файл plist, который содержит массив словарей.Вот один из них:

Словарь Фреда
Имя Фреда
isMale [флажок установлен]

Итак, теперь я инициализирую свой объект Person со словарем, который я прочитал из списка.file:

 -(id) initWithDictionary: (NSDictionary *) dictionary {
    if (self = [super init])
    self.name = [dictionary valueForKey: @"Name"];
    self.isMale = ????
  }

Как завершить приведенный выше код, чтобы для self.isMale было установлено значение YES, если в файле plist установлен флажок, и NO, если нет.Желательно также установить значение NO, если в словаре нет ключа isMale.

Ответы [ 2 ]

91 голосов
/ 29 сентября 2010

BOOL-значения обычно хранятся в контейнерах obj-c, обернутых в объект NSNumber.Если это так в вашем случае, то вы можете получить значение bool, используя:

self.isMale = [[dictionary objectForKey:@"isMale"] boolValue];
6 голосов
/ 29 сентября 2010

Владимир прав, я просто собираюсь вмешаться и сказать, что это хорошо, чтобы проверить, что эти значения из plist также существуют, и если не установить это значение по умолчанию обычно.например:

id isMale = [dictionary valueForKey:@"isMale"];
self.isMale = isMale ? [isMale boolValue] : NO;

, который проверяет, существует ли значение словаря "isMale" в словаре.Если это так, то он получает значение boolValue.Если это не так, он устанавливает для self.isMale значение по умолчанию NO.

...