Non esiste un modo più rapido, ma posso sicuramente suggerire qualcosa che funziona per me. Meglio o no:sta a te decidere.
Anche la tua domanda è molto generica, poiché comprende l'intera infrastruttura di back-end di un'app mobile. Cercherò di essere il più specifico possibile -
1) Fai una richiesta di post http a un file php, che seleziona tutti i dati del database mysql e restituisce il risultato all'app -
Una volta ricevuto il risultato, puoi analizzarlo in Core Data come nell'esempio seguente -
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) Controlla quali dati esistono nei dati principali => niente da fare e quali dati sono nuovi => salva i nuovi dati nei dati principali -
Puoi fare una buona chiamata di testa con un timestamp e controllare se i dati sono stati aggiornati. Se i dati sono stati aggiornati, potrebbe essere un po' complicato aggiornare i singoli attributi dei dati principali. Ciò che ha sempre funzionato per me è eliminare il backend SQLITE sul dispositivo ed eseguire nuovamente il metodo di scrittura dei dati. Puoi utilizzare l'esempio seguente -
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}
}
}
Dopodiché puoi eseguire writeDataToSqlieStore()
metodo di nuovo.
Spero di esserti stato d'aiuto.