我在要存储大于Int32.max和的整数值的实体上具有CoreData属性UInt32.max。该值用作索引,因此查询性能很重要。因此,我选择Integer64在CoreData中用作数据类型。
Int32.max
UInt32.max
Integer64
现在,我正在努力如何在实体实例上存储Int64。另请参阅以下我尝试过的不同方法。
用途NSNumber:
NSNumber
import Foundation import CoreData class Node : NSManagedObject { @NSManaged var id : NSNumber } node.id = Int64(1) > 'Int64' is not convertible to 'NSNumber'
用途NSInteger:
NSInteger
import Foundation import CoreData class Node : NSManagedObject { @NSManaged var id : NSInteger } node.id = Int64(1) > 'Int64' is not convertible to 'NSInteger'
用途Int64:
Int64
import Foundation import CoreData class Node : NSManagedObject { @NSManaged var id : Int64 } node.id = Int64(1) > EXC_BAD_ACCESS (code=1, address=...)
为了使用64位整数,应如何定义/分配属性?
您可以像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位整数。
long long
将属性定义为
@NSManaged var id : Int64 // ... node.id = Int64(...)
应该 也可以使用,因为CoreData支持用于原始数据类型的标量访问器方法。在EXC_BAD_ACCESS我看来,赋值时的异常看起来像是Swift编译器或运行时中的错误。布尔属性的类似问题在这里报告
EXC_BAD_ACCESS
其中,NSNumber财产报告工作,但标Bool属性将导致相同的异常。
Bool