core data is internally sqlite so boolean value is dealt as integer value since sqlite doesn't have boolean value. core data implementation is internally objective-c. objective-c deals with object as optional type (nil) but cannot deal with primitive as optional type.