2013-05-28 26 views
9

Tự hỏi liệu có ai khác đã gặp phải điều này hay không, hoặc nếu có lý do và tôi đang làm điều gì đó sai.Thực thể CoreData với thuộc tính Boolean được lưu dưới dạng đối tượng NSNumber

Tôi có một ứng dụng với CoreData. Trong lược đồ, tôi có một thực thể 'nội dung' với thuộc tính 'đã mở khóa' được đặt thành Boolean.

Tuy nhiên khi tôi tiết kiệm ra lớp Obj C cho đơn vị mặc dù Xcode, xuất hiện mở khóa trong vòng content.h như:

@property (nonatomic, retain) NSNumber * unlocked; 

Nếu tôi thay đổi nó để Boolean trong content.h, tôi nhận được một biên dịch ARC lỗi. Tuy nhiên nếu tôi để nó như một đối tượng NSNumber khi tôi thử và lấy nó, nó sẽ trở lại không nhất quán (như trong trường hợp tôi có một bản in NSLog, nó trở lại như một giá trị khác mỗi khi tôi chạy).

Tôi có thể tìm ra một công việc khá rõ ràng, thiết lập như NSString thành 'yes' hoặc 'no' và so sánh tại điểm thích hợp, nhưng tôi muốn biết liệu có ai biết tại sao điều này xảy ra hay không có cách để giữ nó như một Boolean.

Xin cảm ơn trước.

+2

Bạn có thể chọn tùy chọn * "Sử dụng các thuộc tính vô hướng cho các kiểu dữ liệu nguyên thủy" * khi tạo lớp con đối tượng được quản lý trong Xcode, sau đó bạn sẽ mở khóa '@property (nonatomic) BOOL; ' –

Trả lời

12

CoreData lưu trữ các đối tượng mà BOOL không có.

[NSNumber numberWithBool:YES]

có phải là cách để thiết lập các thuộc tính và bạn có thể sử dụng nó bằng cách đọc mybool = [content.unlocked boolValue];

+6

Bạn cũng có thể sử dụng cú pháp theo nghĩa đen để đặt thuộc tính Dữ liệu cốt lõi boolean: 'object.boolAttribute = @ YES' ' object.boolAttribute = @ NO' – lukestringer90

+0

Chúc mừng cho lời giải thích. '[content.unlocked boolValue]' làm cho nó hoạt động. – Niazipan

2

bools được lưu trữ như NSNumbers trong Core Data (nếu bạn nhìn vào bảng sql của bạn, bạn sẽ thấy chúng được lưu trữ như số nguyên. Vì vậy, các bạn convert BOOL-NSNumber trước khi lưu trữ và chuyển đổi NSNumber-BOOL (hoặc chỉ chúng nó như-là 0/1) khi lấy

tôi đã không thấy bất kỳ mâu thuẫn, tuy nhiên -. nếu lưu trữ NSNumber là zero, nó tương đương với NO và nếu khác không, nó là YES

.
+0

tìm nạp nó, điều này gây ra sự mâu thuẫn. Chúc mừng sự giúp đỡ. – Niazipan

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