从plist文件恢复NSDictionary中的BOOL

Wil*_*sch 36 cocoa boolean objective-c nsdictionary property-list

我有一个plist文件,其中包含一系列字典.这是其中之一:

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

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

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

如何完成上面的代码,以便在plist文件中选中复选框时将self.isMale设置为YES,如果不是则选择NO.如果字典中没有键isMale,则最好也设置为NO.

Vla*_*mir 91

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

self.isMale = [[dictionary objectForKey:@"isMale"] boolValue];
Run Code Online (Sandbox Code Playgroud)


djd*_*zzy 6

弗拉基米尔是对的,我只是想进入,并说好检查那些来自plist的值是否也存在,如果没有通常将其设置为默认值.

就像是:

id isMale = [dictionary valueForKey:@"isMale"];
self.isMale = isMale ? [isMale boolValue] : NO;
Run Code Online (Sandbox Code Playgroud)

哪个检查字典中是否存在键"isMale"的值.如果确实如此,则从中获取boolValue.如果没有,则将self.isMale设置为默认值NO.

  • 如果您希望此人默认为男性(默认为"是"),则仅需要这样做.您可以将消息发送到`nil`( - [NSDictionary objectForKey:]`的返回值和` - [NSDictionary valueForKey:]`当字典中没有键时),而不先检查你是否正常默认为"NO".http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Articles/ocObjectsClasses.html%23//apple_ref/doc/uid/TP30001163-CH11-SW7 (3认同)