Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Core data 如何将核心数据整数64与Swift Int64一起使用?_Core Data_Swift_Ios8 - Fatal编程技术网

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中仍然面临这个问题