Core data 如何将核心数据整数64与Swift Int64一起使用?
我想在一个实体上存储大于Core data 如何将核心数据整数64与Swift Int64一起使用?,core-data,swift,ios8,Core Data,Swift,Ios8,我想在一个实体上存储大于Int32.max和UInt32.max的整数值,该实体上有一个CoreData属性。该值用作索引,因此查找性能很重要。所以我选择使用Integer 64作为CoreData中的数据类型 现在,我正在努力研究如何在实体实例上存储Int64。另请参阅以下我尝试过的不同方法 使用NSNumber: import Foundation import CoreData class Node : NSManagedObject { @NSManaged var id :
Int32.max
和UInt32.max
的整数值,该实体上有一个CoreData属性。该值用作索引,因此查找性能很重要。所以我选择使用Integer 64
作为CoreData中的数据类型
现在,我正在努力研究如何在实体实例上存储Int64。另请参阅以下我尝试过的不同方法
使用NSNumber
:
import Foundation
import CoreData
class Node : NSManagedObject {
@NSManaged var id : NSNumber
}
node.id = Int64(1)
> 'Int64' is not convertible to 'NSNumber'
import Foundation
import CoreData
class Node : NSManagedObject {
@NSManaged var id : NSInteger
}
node.id = Int64(1)
> 'Int64' is not convertible to 'NSInteger'
使用NSInteger
:
import Foundation
import CoreData
class Node : NSManagedObject {
@NSManaged var id : NSNumber
}
node.id = Int64(1)
> 'Int64' is not convertible to 'NSNumber'
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位整数?您可以在托管对象子类中将“Integer 64”属性定义为NSNumber
:
@NSManaged var id : NSNumber
设置值:
let value:Int64 = 20000000000000000
node.id = NSNumber(longLong: value)
检索值:
let value:Int64 = node.id.longLongValue
请注意,long
在32位和64位体系结构上都是64位整数
将属性定义为
@NSManaged var id : Int64
// ...
node.id = Int64(...)
也应该可以,因为核心数据支持原语的标量访问器方法
数据类型。赋值时的EXC\u BAD\u ACCESS
异常看起来像我
就像Swift编译器或运行时中的bug一样。布尔属性的类似问题
这里有报道
NSNumber
属性报告工作,但标量Bool
属性
导致相同的异常。使用您建议的解决方法
NSNumber(longLong:value)
成功。我同意你的看法,后者可能是Swift中的一个bug。Int64在32位体系结构(18113807)上导致陷阱的问题已经在Xcode 6.1 beta中修复了。你认为它在Xcode 6.1 beta中修复了吗?我在Xcode 11.2.1中仍然面临这个问题