37

我有一个包含字典数组的 plist 文件。这是其中之一:

Fred 字典
名称 Fred
isMale [复选框已选中]

所以现在我正在使用从 plist 文件中读取的字典初始化我的 Person 对象:

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

如果在 plist 文件中选中该框,我如何完成上述代码,以便 self.isMale 设置为 YES,如果不是,则设置为 NO。如果字典中没有键 isMale,最好也设置为 NO。

4

3 回答 3

94

BOOL 值通常存储在包裹在 NSNumber 对象中的 obj-c 容器中。如果在您的情况下是这样,那么您可以使用以下方法检索布尔值:

self.isMale = [[dictionary objectForKey:@"isMale"] boolValue];
于 2010-09-29T14:34:11.333 回答
6

Vladimir 是对的,我只是插话并说最好检查 plist 中的这些值是否也存在,如果通常不将其设置为默认值。

就像是:

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

它检查字典中是否存在键“isMale”的值。如果是,那么它会从中获取 boolValue。如果没有,则将 self.isMale 设置为默认值 NO。

于 2010-09-29T15:47:54.183 回答
0

可以使用新格式:

Bool isMale = [dictionary[@"isMale"] boolValue]
于 2021-08-26T10:47:10.867 回答