小编典典

如何在Swift Int64中使用Core Data Integer 64?

swift

我在要存储大于Int32.max和的整数值的实体上具有CoreData属性UInt32.max。该值用作索引,因此查询性能很重要。因此,我选择Integer64在CoreData中用作数据类型。

现在,我正在努力如何在实体实例上存储Int64。另请参阅以下我尝试过的不同方法。

用途NSNumber

import Foundation
import CoreData

class Node : NSManagedObject {
    @NSManaged var id : NSNumber
}

node.id = Int64(1)
> 'Int64' is not convertible to 'NSNumber'

用途NSInteger

import Foundation
import CoreData

class Node : NSManagedObject {
    @NSManaged var id : NSInteger
}

node.id = Int64(1)
> 'Int64' is not convertible to 'NSInteger'

用途Int64

import Foundation
import CoreData

class Node : NSManagedObject {
    @NSManaged var id : Int64
}

node.id = Int64(1)
> EXC_BAD_ACCESS (code=1, address=...)

为了使用64位整数,应如何定义/分配属性?


阅读 318

收藏
2020-07-07

共1个答案

小编典典

您可以像NSNumber在托管对象子类中一样定义“ Integer 64”属性:

@NSManaged var id : NSNumber

设置值:

let value:Int64 = 20000000000000000
node.id = NSNumber(longLong: value)

检索值:

let value:Int64 = node.id.longLongValue

请注意,long long在32位和64位体系结构上都是64位整数。


将属性定义为

@NSManaged var id : Int64

// ...
node.id = Int64(...)

应该 也可以使用,因为CoreData支持用于原始数据类型的标量访问器方法。在EXC_BAD_ACCESS我看来,赋值时的异常看起来像是Swift编译器或运行时中的错误。布尔属性的类似问题在这里报告

其中,NSNumber财产报告工作,但标Bool属性将导致相同的异常。

2020-07-07