Няма най-бърз начин, но определено мога да предложа нещо, което работи за мен. Най-добре или не - вие решавате.
Също така въпросът ви е много общ - тъй като обхваща цялата бекенд инфраструктура на мобилно приложение. Ще се опитам да бъда максимално конкретен -
1) Направете заявка за http публикация към php файл, който избира всички данни от базата данни mysql и връща резултата обратно на приложението -
След като получите резултата, можете да го анализирате в основни данни като примера по-долу -
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) Проверете кои данни съществуват в основните данни => нищо за правене и кои данни са нови => запазете новите данни в основните данни -
Можете да направите добро старо главен разговор с Time Stamp и да проверите дали данните са актуализирани. Ако данните са били актуализирани - може да стане малко трудно актуализирането на отделни атрибути на основни данни. Това, което винаги е работило за мен, е изтриването на SQLITE бекенда на устройството и стартирането на метода за запис на данни отново. Можете да използвате примера по-долу -
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}
}
}
След това можете да стартирате writeDataToSqlieStore()
метод отново.
Надявам се това да помогне.