値がブール値に設定されている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はモデルでブール型に設定されており、次のコードを実行します。
MyClass *myClass = ... (create from NSManagedObjectContext)
myClass.myBoolValue = [NSNumber numberWithBool:YES];
BOOL isBool = [self numberIsBool:num];
primitiveTypeは"i"に設定され、isBoolはNOになります
誰かが私にこれの理由またはそれが設定されたプリミティブ型を尊重するためにmyBoolValueプロパティを取得する方法を説明できますか?
編集:だから、私が達成しようとしていることに混乱はありません-私はNSNumberをブール値に変換しようとはしていません。私はすでにこれをで行う方法を知っています [myBoolValue boolValue]
。
編集#2-より明確にする:NSManagedObjectのプロパティを調べる場合。プロパティがNSNumberであり、その値が1または0の場合、ブール値であることが意図されている場合と整数であることが意図されている場合は、異なるコードパスを使用する必要があります。