2011-11-11 18 views
13

Tôi cố gắng để tiết kiệm một giá trị cơ sở dữ liệu boolean thành một bản đồ như sau -làm thế nào để chèn một (BOOL *) vào NSMutableDictionary

[recentTags setValue:[NSNumber numberWithBool:[aMessage isSet]] forKey:[aMessage tagName]]; 

Nó mang lại cho tôi một lỗi nói rằng "con trỏ không tương thích để nguyên chuyển đổi gửi BOOL * hay còn gọi là char * to 'BOOL' aka signed char "

Làm cách nào để chèn một BOOL * vào từ điển?

+0

Tại sao '-isSet' trả về' BOOL * 'thay vì' BOOL'? –

Trả lời

41

Bó BOOL trong một NSNumber:

NSNumber *boolNumber = [NSNumber numberWithBool:YES]; 

Để có được nó ra:

BOOL b = [boolNumber boolValue]; 

Bạn có thể quấn các loại phi đối tượng khác (chẳng hạn như một con trỏ hoặc một struct) trong một NSValue .


EDIT: Giả sử bạn thực sự có nghĩa là một BOOL * (con trỏ):

NSValue *boolValue = [NSValue value:pointerToBool withObjCType:@encode(BOOL*)]; 
BOOL *b = [boolValue pointerValue]; 
+0

Như bạn có thể thấy trong câu hỏi của tôi tôi đã làm điều đó nhưng nó không làm việc cho tôi. Đó là khi tôi nhận được lỗi mà tôi đã đề cập. – Suchi

+0

Bạn có chắc '[aMessage isSet]' đang trả về BOOL chứ không phải BOOL * không? Nếu nó trả về sau, bạn cần sử dụng '[Số NSNumberWithBool: * [aMessage isSet]]' (mặc dù trước tiên bạn nên kiểm tra xem nó không phải là NULL). – titaniumdecoy

+2

Bắt đầu với Clang v3.1, chúng ta có thể sử dụng các chữ: 'NSNumber * yesNumber = @YES;' và 'NSNumber * noNumber = @NO;', tương đương với '[Số NSNumberWithBool: YES]' etc – coco

0

phương pháp isSet bạn sẽ cần phải có chữ ký sau đây: - (BOOL)isSet;

Giả sử đó là trường hợp, có không phải là bất kỳ vấn đề bằng cách sử dụng NSNumber như đã đề cập bởi titandecoy.

Câu cuối cùng của bạn hấp dẫn tôi, BOOL *. Chắc chắn bạn có nghĩa là BOOL, nếu bạn hoàn toàn cần tham chiếu boolean, thì tôi khuyên bạn nên lưu trữ BOOL ban đầu/thực tế trong NSNumber và lưu trữ các tham chiếu đối tượng ở bất cứ đâu bạn muốn (ví dụ: NSMutableDictionary).