Bou*_*uke 12 core-data swift ios8
我在一个实体上有一个CoreData属性,我想要存储大于Int32.max和的整数值UInt32.max.该值用作索引,因此查找性能很重要.所以我选择Integer 64在CoreData中使用as数据类型.
现在我正在努力研究如何在我的实体实例上存储Int64.另请参阅我尝试过的以下不同方法.
用途NSNumber:
import Foundation
import CoreData
class Node : NSManagedObject {
@NSManaged var id : NSNumber
}
node.id = Int64(1)
> 'Int64' is not convertible to 'NSNumber'
Run Code Online (Sandbox Code Playgroud)
用途NSInteger:
import Foundation
import CoreData
class Node : NSManagedObject {
@NSManaged var id : NSInteger
}
node.id = Int64(1)
> 'Int64' is not convertible to 'NSInteger'
Run Code Online (Sandbox Code Playgroud)
用途Int64:
import Foundation
import CoreData
class Node : NSManagedObject {
@NSManaged var id : Int64
}
node.id = Int64(1)
> EXC_BAD_ACCESS (code=1, address=...)
Run Code Online (Sandbox Code Playgroud)
如何定义/分配属性以使用64位整数?
Mar*_*n R 25
您可以NSNumber在托管对象子类中定义"Integer 64"属性:
@NSManaged var id : NSNumber
Run Code Online (Sandbox Code Playgroud)
设定值:
let value:Int64 = 20000000000000000
node.id = NSNumber(longLong: value)
Run Code Online (Sandbox Code Playgroud)
检索值:
let value:Int64 = node.id.longLongValue
Run Code Online (Sandbox Code Playgroud)
请注意,long long在32位和64位架构上都是64位整数.
将属性定义为
@NSManaged var id : Int64
// ...
node.id = Int64(...)
Run Code Online (Sandbox Code Playgroud)
也应该工作,因为Core Data支持原始数据类型的标量访问器方法.EXC_BAD_ACCESS分配值时的异常在我看来就像Swift编译器或运行时中的错误.此处报告了布尔属性的类似问题
其中,NSNumber财产上报工作,但标Bool属性将导致相同的异常.