我希望Core Data中的Entity属性是64位整数。由于该模型将在iOS上运行,据我所知这些设备不是64位,我认为NSNumber
是可行的方法(核心数据为您提供了对象或标量属性选项)原始类型)。
我假设NSNumber
将在内部负责跟踪64位的合适表示。
现在,我需要在某个时刻从我的实体中的这个“64位”属性中减去1(如果您没猜到,64位属性是Twitter API中的max_id参数),但是这样做,我首先需要取消NSNumber属性中的数字。
我应该得到intValue吗?的longValue? unsignedIntValue? unsignedLongValue?好久不见?哪一个?
答案 0 :(得分:8)
由于您已经知道了类型(64位整数),因此无需检查它。
要从NSNumber中获取64位整数,请执行以下操作之一:
NSInteger myInteger = [myNSNumber integerValue];
int64_t myInteger = [myNSNumber integerValue];
为了只添加一个,你可以使用这样的东西:
myNSNumber = [NSNumber numberWithInteger:[myNSNumber integerValue]+1]];
请注意,iOS 具有64位数据类型,例如int64_t
和NSInteger
。
修改强>
如果您使用NSNumber
的唯一原因是存储64位整数,您可以在模型子类中声明这样的属性并完全跳过取消装箱/装箱:
@property (nonatomic) int64_t myIntValue;
请注意,如果您选择创建NSManagedObject子类功能的使用基本数据类型的标量属性选项,核心数据会默认执行此操作。
答案 1 :(得分:0)
尝试将其放入NSNumber
类别:
-(int64_t) int64value
{
if (sizeof(short) == 8)
return [self shortValue];
if (sizeof(int) == 8)
return [self intValue];
if (sizeof(long) == 8)
return [self longValue];
if (sizeof(long long) == 8)
return [self longLongValue];
return -1; // or throw an exception
}
答案 2 :(得分:0)
要获取NSNumber中包含的C类型,请使用objCType
实施例
NSNumber *myFloat = [NSNumber numberWithFloat:5.5f];
NSLog(@"%s", [myFloat objCType]);
将打印" f"因为它包含float类型的值。
另外,请查看@encode(),它将返回一个C类型字符。
实施例
NSNumber *myFloat = [NSNumber numberWithFloat:5.5f];
if (strcmp(myFloat) == @encode(float)) {
NSLog(@"This is a float");
}
另外
NSNumber *myFloat = [NSNumber numberWithFloat:5.5f];
CFNumberType numberType = CFNumberGetType((CFNumberRef)myFloat);