Det finns inget snabbaste sätt men jag kan definitivt föreslå något som fungerar för mig. Bäst eller inte - det är upp till dig att avgöra.
Din fråga är också mycket generisk - eftersom den omfattar hela backend-infrastrukturen för en mobilapp. Jag ska försöka vara så specifik jag kan -
1) Gör en http-postbegäran till en php-fil, som väljer all data i mysql-databasen och ger resultatet tillbaka till appen -
När du har fått resultatet kan du analysera det i kärndata som exemplet nedan -
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) Kontrollera vilka data som finns i kärndata => inget att göra, och vilka data som är nya => spara de nya uppgifterna i kärndata -
Du kan göra bra ol head call med en tidsstämpel och kontrollera om data har uppdaterats. Om data har uppdaterats - det kan bli lite knepigt att uppdatera individuella Core Data-attribut. Det som alltid har fungerat för mig är att ta bort SQLITE-backend på enheten och köra dataskrivningsmetoden igen. Du kan använda exemplet nedan -
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}
}
}
Efter det kan du köra writeDataToSqlieStore()
metod igen.
Hoppas det hjälper.