Comment utiliser la Base de Données de type Entier 64 avec Swift Int64?
J'ai un CoreData attribut d'une entité sur laquelle je veux stocker les valeurs de nombre entier plus grand que Int32.max
et UInt32.max
. La valeur est utilisée comme un indice, d'une sorte de recherche de la performance est importante. J'ai donc opté pour l'utilisation de Integer 64
que le type de données dans CoreData.
Maintenant, je suis en difficulté sur la façon de stocker un Int64 sur mon instance d'entité. Voir aussi les différentes approches que j'ai essayé.
Utilisation NSNumber
:
import Foundation
import CoreData
class Node : NSManagedObject {
@NSManaged var id : NSNumber
}
node.id = Int64(1)
> 'Int64' is not convertible to 'NSNumber'
Utilisation NSInteger
:
import Foundation
import CoreData
class Node : NSManagedObject {
@NSManaged var id : NSInteger
}
node.id = Int64(1)
> 'Int64' is not convertible to 'NSInteger'
Utilisation Int64
:
import Foundation
import CoreData
class Node : NSManagedObject {
@NSManaged var id : Int64
}
node.id = Int64(1)
> EXC_BAD_ACCESS (code=1, address=...)
Comment l'attribut être défini /assignés dans l'ordre d'utiliser les entiers 64 bits?
OriginalL'auteur bouke | 2014-06-22
Vous devez vous connecter pour publier un commentaire.
Vous pouvez définir le "type Entier 64" attribut comme
NSNumber
dans l'objet géré sous-classe:La définition de la valeur:
Récupération de la valeur:
Noter que
long long
est un entier de 64 bits sur 32-bits et 64-bit architecture.La définition de la propriété comme
devrait aussi le travail, parce que la Base de Données prend en charge scalaire des méthodes accesseur pour des primitifs
types de données. Le
EXC_BAD_ACCESS
exception lors de l'affectation d'une valeur me semblecomme un bug dans la Swift compilateur ou de l'exécution. Un problème similaire pour une propriété Booléenne
est rapporté ici
où un
NSNumber
propriété est signalé à travailler, mais le scalaireBool
propriétéles causes de la même exception.
NSNumber(longLong: value)
travaillé. Je suis d'accord avec vous que ce dernier est probablement un bug dans Swift.Le problème avec Int64 causant des pièges sur les architectures 32 bit (18113807) a été corrigé dans Xcode 6.1 bêta.
OriginalL'auteur Martin R