Nie ma najszybszego sposobu, ale zdecydowanie mogę zaproponować coś, co działa dla mnie. Najlepiej czy nie - decyzja należy do Ciebie.
Twoje pytanie jest również bardzo ogólne - ponieważ obejmuje całą infrastrukturę zaplecza aplikacji mobilnej. Postaram się być jak najbardziej konkretny -
1) Wykonaj żądanie posta http do pliku php, który wybierze wszystkie dane bazy danych mysql i zwróci wynik do aplikacji -
Po otrzymaniu wyniku możesz go przeanalizować w danych podstawowych, jak w poniższym przykładzie -
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) Sprawdź, które dane istnieją w danych podstawowych => nic do zrobienia, a które dane są nowe => zapisz nowe dane w danych podstawowych -
Możesz wykonać dobre wywołanie głowy ze znacznikiem czasu i sprawdzić, czy dane zostały zaktualizowane. Jeśli dane zostały zaktualizowane - aktualizacja poszczególnych atrybutów danych podstawowych może być trochę trudna. To, co zawsze działało dla mnie, to usunięcie backendu SQLITE na urządzeniu i ponowne uruchomienie metody zapisu danych. Możesz użyć poniższego przykładu -
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}
}
}
Następnie możesz uruchomić writeDataToSqlieStore()
metoda ponownie.
Mam nadzieję, że to pomoże.