如何使用核心数据整数 64 属性?

Posted

技术标签:

【中文标题】如何使用核心数据整数 64 属性?【英文标题】:How do I use a core data Integer 64 property? 【发布时间】:2012-05-25 23:22:28 【问题描述】:

我希望 Core Data 中的 Entity 属性是 64 位整数。由于该模型将在 ios 上运行,并且据我所知这些设备不是 64 位的,我认为 NSNumber 是可行的方法(核心数据为您提供了原始类型的对象或标量属性选项)。 我假设NSNumber 将在内部负责跟踪 64 位的合适表示。

现在,我需要在某个时候从我的实体中的这个“64 位”属性中减去 1(如果您没有猜到,64 位属性是 Twitter API 中的 max_id 参数),但要这样做,我首先需要将 NSNumber 属性中的数字拆箱。

那么我应该得到 intValue 吗?长值?无符号整数值?无符号长值?长长?哪一个?

【问题讨论】:

【参考方案1】:

由于您已经知道类型(64 位整数),因此您无需检查它。

要从 NSNumber 中获取 64 位整数,请执行以下操作之一:

NSInteger myInteger = [myNSNumber integerValue];
int64_t   myInteger = [myNSNumber integerValue];

为了只添加一个,你可以使用这样的东西:

myNSNumber = [NSNumber numberWithInteger:[myNSNumber integerValue]+1]];

请注意,iOS确实有 64 位数据类型,例如 int64_tNSInteger

编辑: 如果您使用 NSNumber 的唯一原因是存储 64 位整数,您可以在模型子类中声明这样的属性并完全跳过拆箱/装箱:

@property (nonatomic) int64_t myIntValue;

请注意,如果您选择创建 NSManagedObject 子类功能的对原始数据类型使用标量属性选项,核心数据默认会执行此操作。

【讨论】:

【参考方案2】:

尝试将其放入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

【讨论】:

对不起,你是说没有办法告诉我默认情况下我应该以哪种格式从 NSNumber 中获取值?似乎没有意义。如果 CoreData 告诉我我可以在 NSNumber 中存储一个 64 位整数,难道不应该有一种简单的方法让我从 NSNumber 中减去 1 而无需关心它在内部是如何表示的吗? myNSManagedObject.myNSNumber.objCType 抛出 EXEC_BAD_ACCESS... 并设置数字。我可以在调试器中看到它并将其打印到控制台。什么给了?【参考方案3】:

要获取 NSNumber 中包含的 C 类型,请使用 objCType

例子

NSNumber *myFloat = [NSNumber numberWithFloat:5.5f];
NSLog(@"%s", [myFloat objCType]);

将打印“f”,因为它包含一个浮点类型的值。

另外,查看@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);

【讨论】:

以上是关于如何使用核心数据整数 64 属性?的主要内容,如果未能解决你的问题,请参考以下文章

如何检索文本字段文本并将其作为整数 32 存储在核心数据中?

我应该如何对我的核心数据实体中的 NSNumber 属性执行计算/更新?

如何获取核心数据属性中所有条目的总和?

如何在 SwiftUI 中汇总过滤的核心数据?

我应该在核心数据中使用字符串而不是整数作为属性类型吗?

如何在核心数据中使用 NSPredicate 从属性之一获取值