2010-09-29 38 views
33

Tôi có tệp plist chứa một bộ từ điển. Đây là một trong số họ:Khôi phục BOOL bên trong NSDictionary từ một tệp plist

Fred điển
Tên Fred
isMale [hộp được kiểm tra]

Vì vậy, bây giờ tôi đang khởi tạo đối tượng Person với các từ điển mà tôi đọc từ tập tin plist:

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

Làm cách nào để kết thúc mã ở trên để self.isMale được đặt thành CÓ nếu hộp được chọn trong tệp plist và NO nếu không. Tốt hơn là được đặt thành NO nếu không có khóa isMale trong từ điển.

Trả lời

81

Giá trị BOOL thường được lưu trữ trong các thùng chứa obj-c được bọc trong đối tượng NSNumber. Nếu nó là như vậy trong trường hợp của bạn thì bạn có thể lấy giá trị bool sử dụng:

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

Tuyệt vời! Cảm ơn người đàn ông. –

6

Vladimir là đúng, tôi chỉ sẽ kêu vang trong và nói rằng nó là tốt để kiểm tra xem những giá trị từ plist tồn tại cũng và nếu không đặt nó thành giá trị mặc định thường.

Cái gì như:

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

nào kiểm tra để xem nếu giá trị cho phím "isMale" tồn tại trong từ điển. Nếu nó sau đó nó nhận được boolValue từ nó. Nếu nó không thì nó đặt self.isMale thành mặc định là NO.

+3

Chỉ cần thiết nếu bạn muốn người đó là nam theo mặc định (mặc định là 'CÓ'). Bạn có thể gửi thư đến 'nil' (giá trị trả về của' - [NSDictionary objectForKey:] 'và' - [NSDictionary valueForKey:] 'khi khóa không có trong từ điển) mà không kiểm tra trước nếu bạn đã đồng ý với một mặc định của 'NO'. http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Articles/ocObjectsClasses.html%23//apple_ref/doc/uid/TP30001163-CH11-SW7 –

+0

Ah yeah bạn nói đúng . Tôi đã bị bắt giữa việc cố gắng cung cấp một câu trả lời chung cho các giá trị khác ngoài BOOL (chẳng hạn như NSString) và cung cấp một cách chung để cung cấp các giá trị mặc định. – djdrzzy

+0

Tôi sắp bị giật và nói rằng Apple không được đảm bảo giữ KHÔNG định nghĩa (BOOL) 0 mãi mãi mặc dù trong trường hợp đó giá trị mặc định có thể không phải lúc nào cũng KHÔNG. : P Nếu họ đã bao giờ thay đổi nó mặc dù đó sẽ là khá ngu ngốc và không thực tế. – djdrzzy

Các vấn đề liên quan