2010-09-29 41 views
33

Bir sözlük dizisi içeren bir plist dosyası var.Bir NSDictionary içindeki bir BOOL bir plist dosyasından geri yükleniyor

Fred Sözlük
İsim Fred şimdi ben plist dosyadan okunan sözlükle benim Kişi nesne başlatılırken am
isMale [kutu işaretlendiğinde] Yani

:

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

Yukarıdaki kodu nasıl bitirebilirim, böylece kutu plist dosyasında işaretliyse self.isMale öğesi EVET olarak ayarlı ve YOK ise HAYIR olarak ayarlanır. Tercihen sözlükte hiç bir tuş yok ise HAYIR olarak ayarlanır.

cevap

81

BOOL değerleri, genellikle NSNumber nesnesine sarılmış objeler içinde saklanır. o senin durumunda böyle ise o zaman kullanarak bool değer alabilir:

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

Awesome! Teşekkürler dostum. –

6

Vladimir haklı, ben sadece uymak ve onu plist gelen bu değerler de var olduğunu kontrol etmek iyidir söyleyeceğim ve genellikle varsayılan bir değere ayarlamazsa. gibi

şey:

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

tuşu "isMale" değeri sözlükte var olmadığını denetler. Eğer yaparsa o zaman boolValue alır. Eğer o değilse, self.isMale değerini NO değerine ayarlar.

+3

Bu yalnızca, kişinin varsayılan olarak erkek olmasını istiyorsanız gereklidir (varsayılan: "YES"). Mesajı, 'nil' seçeneğine gönderebilirsiniz ('- [NSDictionary objectForKey:]' ve '- [NSDictionary valueForKey:]' nin '' '' '' '' '' '' '' '' '' '' '' '' '', ''' ile ilk olarak kontrol etmeden kontrol edin. 'NO' varsayılanı. http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Articles/ocObjectsClasses.html%23//apple_ref/doc/uid/TP30001163-CH11-SW7 –

+0

Ah evet haklısınız . BOOL (örneğin bir NSString gibi) dışındaki değerler için genel bir cevap sağlamaya ve varsayılan değerler sağlamada genel bir yol sağlamaya çalıştım. – djdrzzy

+0

Ben bir pislik olacağım ve Apple'ın NO (0) (BOOL) 0 olarak tanımlanmış halde kalmasını garanti etmediğini söyleyeyim, bu durumda varsayılan değer her zaman HAYIR olmayabilir. : P Eğer hiç değiştirdiyseler de bu oldukça aptalca ve pratik olmazdı. – djdrzzy