Il n'y a pas de moyen le plus rapide, mais je peux certainement suggérer quelque chose qui fonctionne pour moi. Meilleur ou pas - c'est à vous de décider.
De plus, votre question est très générique - car elle englobe toute l'infrastructure dorsale d'une application mobile. Je vais essayer d'être aussi précis que possible -
1) Faites une demande de publication http à un fichier php, qui sélectionne toutes les données de la base de données mysql et renvoie le résultat à l'application -
Une fois que vous avez reçu le résultat, vous pouvez l'analyser dans Core Data comme dans l'exemple ci-dessous -
func writeDataToSqliteStore() throws {
// Configure the Network Call here with NSURL & NSData returning an array that you can write to the Core Data SQLITE backend.
do {
jsonResponse = try NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions()) as? NSArray
} catch {
print(error)
}
let localEntity = self.insertNewEntity("EntityName") as? CoreDataEntityClass
for singleObject in jsonResponse {
localEntity.name = singleObject.valueForKey("name")
localEntity.address = singleObject.valueForKey("address")
}
}
2) Vérifiez quelles données existent dans les données de base => rien à faire, et quelles données sont nouvelles => enregistrez les nouvelles données dans les données de base -
Vous pouvez faire un bon appel principal avec un horodatage et vérifier si les données ont été mises à jour. Si les données ont été mises à jour, la mise à jour des attributs individuels des données de base peut être un peu délicate. Ce qui a toujours fonctionné pour moi, c'est de supprimer le backend SQLITE sur l'appareil et d'exécuter à nouveau la méthode d'écriture de données. Vous pouvez utiliser l'exemple ci-dessous -
func removeSQLITEFiles() {
let fileManager = NSFileManager.defaultManager()
let URL1 = self.applicationDocumentsDirectory.URLByAppendingPathComponent("File.sqlite")
let URL2 = self.applicationDocumentsDirectory.URLByAppendingPathComponent("File.sqlite-wal")
let URL3 = self.applicationDocumentsDirectory.URLByAppendingPathComponent("File.sqlite-shm")
if fileManager.fileExistsAtPath(URL1.path!) {
do {
try fileManager.removeItemAtURL(URL1)
}
catch {error}
}
if fileManager.fileExistsAtPath(URL2.path!) {
do {
try fileManager.removeItemAtURL(URL2)
}
catch {error}
}
if fileManager.fileExistsAtPath(URL3.path!) {
do {
try fileManager.removeItemAtURL(URL3)
}
catch {error}
}
}
Après cela, vous pouvez exécuter le writeDataToSqlieStore()
méthode à nouveau.
J'espère que ça aide.