SQLite et Swift
Salut
Toujours dans mon projet test (voir question sur CorePlot) j'essaye d'utiliser un wrapper SQLite pour Swift pour stocker mes relevé (un insert toutes les 0.1s, CoreData n'est pas adapté pour ça), et j'ai un problème à priori lié à Swift 1.2.
J'utilise le projet https://github.com/stephencelis/SQLite.swift
Le bout de code intéressant est ici :
let manager: CMMotionManager = CMMotionManager()
let sqliteDB = Database("\(NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true).first!)/db.sqlite3")
let SQLTime = Expression<Int64>("time")
let SQLRoll = Expression<Double>("roll")
let SQLPitch = Expression<Double>("pitch")
let SQLYaw = Expression<Double>("yaw")
let SQLGravityX = Expression<Double>("gravityX")
let SQLGravityY = Expression<Double>("gravityY")
let SQLGravityZ = Expression<Double>("gravityZ")
let SQLAccelerationX = Expression<Double>("accelerationX")
let SQLAccelerationY = Expression<Double>("accelerationY")
let SQLAccelerationZ = Expression<Double>("accelerationZ")
override func viewDidLoad() {
super.viewDidLoad()
let sensors = sqliteDB["sensors"]
sqliteDB.create(table: sensors, ifNotExists: true) { t in
t.column(SQLTime, primaryKey: true)
t.column(SQLRoll)
t.column(SQLPitch)
t.column(SQLYaw)
t.column(SQLGravityX)
t.column(SQLGravityY)
t.column(SQLGravityZ)
t.column(SQLAccelerationX)
t.column(SQLAccelerationY)
t.column(SQLAccelerationZ)
}
}
override func viewWillAppear(animated: Bool) {
if manager.deviceMotionAvailable {
manager.deviceMotionUpdateInterval = 0.1
manager.startDeviceMotionUpdatesToQueue(NSOperationQueue.mainQueue()) {
(data: CMDeviceMotion!, error: NSError!) -> Void in
let sensors = self.sqliteDB["sensors"]
sensors.insert(self.SQLTime <- time(0),
self.SQLRoll <- data.attitude.roll,
self.SQLYaw <- data.attitude.yaw,
self.SQLGravityX <- data.gravity.x,
self.SQLGravityY <- data.gravity.y,
self.SQLGravityZ <- data.gravity.z,
self.SQLAccelerationX <- data.userAcceleration.x,
self.SQLAccelerationY <- data.userAcceleration.y,
self.SQLAccelerationZ <- data.userAcceleration.z)!
}
}
}
Mon problème est à la dernière ligne, sur le sensors.insert.
Si je met le ! ou ? à la fin comme recommandé ici : https://github.com/stephencelis/SQLite.swift/issues/34et là http://stackoverflow.com/questions/29890073/cannot-invoke-insert-with-an-argument-list-of-type
J'ai l'erreur suivante :
ViewController.swift:101:70: Could not find an overload for 'insert' that accepts the supplied arguments
Si je ne met rien j'ai :
ViewController.swift:93:25: Cannot invoke 'insert' with an argument list of type '(Setter, Setter, Setter, Setter, Setter, Setter, Setter, Setter, Setter)'
Si quelqu'un a une idée je suis preneur...
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Problème réglé avec l'aide du développeur sur Twitter.
Il y a une note dans la partie contribution sur son projet à cet propos https://github.com/stephencelis/SQLite.swift/blob/master/CONTRIBUTING.md#bugs
En gros en éclatant la ligne en sous variable, le message d'erreur change et deviens compréhensible.