2010-09-29 72 views
33

我有一個plist文件,其中包含一個字典數組。這裏是其中的一個:從plist文件中恢復NSDictionary中的BOOL

弗雷德解釋
名稱弗雷德
isMale [複選框]

所以現在我初始化我的Person對象與我從plist文件讀取字典:

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

如何完成上述代碼,以便self.isMale在plist文件中被選中時設置爲YES,如果不是,則爲NO。如果字典中沒有鍵isMale,最好也設置爲NO。

回答

81

BOOL值通常存儲在包裝在NSNumber對象中的obj-c容器中。如果是這樣,你的情況,那麼你可以使用檢索bool值:

self.isMale = [[dictionary objectForKey:@"isMale"] boolValue]; 
+0

太棒了!謝啦。 – 2016-04-15 11:13:11

6

弗拉基米爾是正確的,我只是去附和,說這是好事,檢查從plist中這些值也同樣存在,並且如果通常不將其設置爲默認值。

喜歡的東西:

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

進行檢查,看是否爲關鍵「isMale」的價值存在於字典。如果確實如此,它會從中獲取boolValue。如果沒有,那麼它將self.isMale設置爲NO的默認值。

+3

只有當你想讓這個人默認爲男性時纔有必要(默認爲YES)。你可以發送消息到'nil'(' - [NSDictionary objectForKey:]'和' - [NSDictionary valueForKey:]'當字典中不存在該密鑰時的返回值),而不檢查你是否可以缺省爲「否」。 http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Articles/ocObjectsClasses.html%23//apple_ref/doc/uid/TP30001163-CH11-SW7 – 2010-09-29 18:22:29

+0

啊,你是對的。我陷入了嘗試爲BOOL以外的值(如NSString)提供一般性答案並提供一種提供默認值的一般方法。 – djdrzzy 2010-09-29 21:47:45

+0

我會變成一個混蛋,並且說蘋果公司不保證永遠將NO定義爲(BOOL)0,儘管在這種情況下,默認值可能不會始終爲NO。 :P如果他們曾經改過它,雖然這會很愚蠢和不切實際。 – djdrzzy 2010-09-29 21:56:36