如何判断 Core Data 的 NSNumber 属性的类型
我有一个使用 Core Data 的 iOS 4 项目。当我设计核心数据模型时,属性有Integer 64
、Integer 32
、Integer 16
、Decimal
、 双精度
、浮点
和布尔
。
但在生成的NSManagedObject
子类中,它们都是NSNumber*
。因此,当我使用它时,如何判断 NSNumber
是 long
、double
、float
,还是一个 BOOL
?
I have an iOS 4 project using Core Data. When I design the Core Data Model, the attributes have Integer 64
, Integer 32
, Integer 16
, Decimal
, Double
, Float
, and Boolean
.
But in the generated NSManagedObject
subclasses, they are all NSNumber*
. So when I use it, how can I tell if that NSNumber
is a long
, a double
, a float
, or a BOOL
?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
检查
NSAttributeDescription.h
标头,了解除NSInteger32AttributeType
之外的其他有效属性类型。Check the
NSAttributeDescription.h
header for other valid attribute types besidesNSInteger32AttributeType
.NSNumber
与 CFNumber 是免费桥接的,CFNumber
可以做到这一点:CFNumberType
枚举值告诉您数字类实际使用的类型来储存你的价值。但类型不能保证是您创建数字时所说的类型,因此如果您想知道模型期望什么类型,您应该按照 Ole Begemann 的建议进行操作并获取 AttributeDescription 的属性类型。NSNumber
is toll-free bridged with CFNumber, andCFNumber
can do this:The
CFNumberType
enum value tells you the type actually used by the number class to store your value. But the type is not guaranteed to be what you said it should be when you created the number, so if you want to know what type the model expects, you should do as Ole Begemann suggested and get the attribute type of theAttributeDescription
.我不确定是否有办法知道这一点,但为了让您的生活更轻松,您可以为每个核心数据实体创建一个类别,并添加与属性的实际类型相匹配的新设置器和获取器。在这些设置器/获取器上,您必须进行数据转换并调用生成的核心数据设置器/获取器。
I'm not sure there is a way to know that, but to make your life easier you can create a Category for each Core Data Entity, and add new setters and getters that match the actual type of your attributes. On those setters/getters you have to make the data conversions and invoke the generated Core Data setters/getters.
核心数据层只能处理对象,您看到的不同选择是它将如何存储在底层数据库中。
NSNumber 类可以在上述值之间自由“转换”。只需选择对您的情况有意义的做法即可。是布尔值吗?然后将其保存为这样(在数据库中占用更少的空间)是否需要高精度,是否需要双精度等。当您在运行时处理值时, NSNumber 将为您处理一切。
因此,在代码中访问的 bool 看起来像这样:
或设置:
The Core Data layer can only deal with objects, the different selections you see is how it will be stored in the underlying database.
The NSNumber class can "convert" freely between the above values. Just select what makes sense to do in your case. Is is a bool? then save it as such (takes less space in the db) do you need high precision do double etc. When you at runtime deal with the values NSNumber will take care of everything for you.
So a bool accessed in code looks like this:
or setting: