我在一个实体上有一个CoreData属性,我希望在该实体上存储大于Int32.max
和UInt32.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位整数?
答案 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
属性
导致同样的例外。