Neexistuje žádný nejrychlejší způsob, ale určitě mohu navrhnout něco, co pro mě funguje. Nejlepší nebo ne - je na vás, abyste se rozhodli.
Vaše otázka je také velmi obecná – protože zahrnuje celou backendovou infrastrukturu mobilní aplikace. Pokusím se být co nejkonkrétnější –
1) Proveďte http požadavek na soubor php, který vybere všechna data z databáze mysql a vrátí výsledek zpět do aplikace -
Jakmile obdržíte výsledek, můžete jej analyzovat v Core Data jako v příkladu níže -
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) Zkontrolujte, která data existují v základních datech => není co dělat a která data jsou nová => uložte nová data do základních dat -
Můžete udělat dobrý ol head call s časovým razítkem a zkontrolovat, zda byla data aktualizována. Pokud byla data aktualizována - může být trochu složitější aktualizovat jednotlivé atributy Core Data. Vždy mi fungovalo smazání backendu SQLITE na zařízení a opětovné spuštění metody zápisu dat. Můžete použít příklad níže -
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}
}
}
Poté můžete spustit writeDataToSqlieStore()
znovu metoda.
Doufám, že to pomůže.