如何在 Swift Int64 中使用 Core Data Integer 64?
Posted
技术标签:
【中文标题】如何在 Swift Int64 中使用 Core Data Integer 64?【英文标题】:How to use Core Data Integer 64 with Swift Int64? 【发布时间】:2014-06-22 11:15:19 【问题描述】:我在一个实体上有一个 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 位整数?
【问题讨论】:
【参考方案1】:您可以在托管对象子类中将“Integer 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
属性
导致同样的异常。
【讨论】:
使用您建议的解决方法NSNumber(longLong: value)
有效。我同意你的观点,后者可能是 Swift 中的一个错误。
Int64 在 32 位架构 (18113807) 上导致陷阱的问题已在 Xcode 6.1 beta 中得到修复。
你认为它在 xcode 6.1 beta 中修复了吗?我在 xcode 11.2.1 中仍然面临这个问题以上是关于如何在 Swift Int64 中使用 Core Data Integer 64?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Core Data 中使用 swift 4 Codable?
如何在 Core Data 中使用 swift 4 Codable?