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

时间:2014-06-22 11:15:19

标签: core-data swift ios8

我在一个实体上有一个CoreData属性,我希望在该实体上存储大于Int32.maxUInt32.max的整数值。该值用作索引,因此查找性能很重要。所以我选择在CoreData中使用Integer 64作为数据类型。

现在我正在努力研究如何在我的实体实例上存储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位整数?

1 个答案:

答案 0 :(得分:25)

您可以定义"整数64"属性为NSNumber在托管对象子类中:

@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(...) 

应该也可以工作,因为Core Data支持基元的标量访问器方法 数据类型。在我看来,分配值时出现EXC_BAD_ACCESS异常 就像Swift编译器或运行时中的错误一样。布尔属性的类似问题 在这里报道

报告NSNumber属性有效,但标量Bool属性 导致同样的例外。