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

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属性将导致相同的异常.