我遇到了一个 NSManagedObject 子类的问题,其中值设置为布尔值,但原始类型似乎总是一个整数。
这是描述问题的场景:
如果我有一种方法可以检查 NSNumber 的原始类型,如下所示:
- (BOOL) numberIsBool:(NSNumber*)numberToCheck {
const char *primitiveType = [numberToCheck objCType];
return (strcmp(primitiveType, @encode(BOOL)) == 0 );
}
我执行以下代码:
NSNumber *num = [NSNumber numberWithBool:YES];
BOOL isBool = [self numberIsBool:num];
正如预期的那样,primitiveType 将是“c”并且 isBool 将是 YES。
但是,如果我采用 NSManagedObject 子类:
@interface MyClass : NSManagedObject
@property (nonatomic, retain) NSNumber *myBoolValue;
...
@end
其中 myBoolValue 设置为模型中的 Boolean 类型,我执行以下代码:
MyClass *myClass = ... (create from NSManagedObjectContext)
myClass.myBoolValue = [NSNumber numberWithBool:YES];
BOOL isBool = [self numberIsBool:num];
原始类型将设置为“i”,isBool 将设置为 NO
谁能向我解释这个原因或我如何让 myBoolValue 属性尊重它设置的原始类型?
编辑:所以我想要完成的事情没有混淆 - 我不是试图将 NSNumber 转换为布尔值。我已经知道如何使用 [myBoolValue boolValue]
.
编辑#2 - 更多说明:如果我询问 NSManagedObject 的属性。当属性是 NSNumber 并且它的值是 1 或 0 时,如果它打算是一个布尔值,我需要采用不同的代码路径,而不是它打算是一个整数。