Não existe uma maneira mais rápida, mas posso definitivamente sugerir algo que funcione para mim. Melhor ou não - cabe a você decidir.
Além disso, sua pergunta é muito genérica - pois abrange toda a infraestrutura de back-end de um aplicativo móvel. Vou tentar ser o mais específico possível...
1) Faça uma solicitação http post para um arquivo php, que seleciona todos os dados do banco de dados mysql e devolve o resultado para o aplicativo -
Depois de receber o resultado, você pode analisá-lo no Core Data como no exemplo abaixo -
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) Verifique quais dados existem nos dados principais => nada a fazer e quais dados são novos => salve os novos dados nos dados principais -
Você pode fazer uma boa chamada de cabeça com um Time Stamp e verificar se os dados foram atualizados. Se os dados foram atualizados - pode ser um pouco complicado atualizar os atributos individuais dos Core Data. O que sempre funcionou para mim é excluir o back-end SQLITE no dispositivo e executar o método de gravação de dados novamente. Você pode usar o exemplo abaixo -
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}
}
}
Depois disso, você pode executar o
writeDataToSqlieStore()
método novamente. Espero que ajude.