Быстрая синхронизация данных основных данных базы данных MySQL

В моем приложении Swift 2 пользователь может сохранять данные в основных данных.
в будущем я хотел бы понять, что данные будут сохранены в основных данных и в базе данных MYSQL.

Каков наилучший способ синхронизации данных между основными данными и MySQL

моя идея заключалась в том, что при каждом запуске приложения будет запускаться процесс:

  • сделайте запрос HTTP post к файлу php, который выберет все данные базы данных mysql и вернет результат приложению
  • проверить, какие данные существуют в основных данных => ничего не делать, а какие новые данные => сохранить новые данные в основных данных

это лучший и самый быстрый способ сделать это?

0

Решение

Существует не самый быстрый способ, но я могу определенно предложить то, что работает для меня. Лучше или нет — решать вам.

Также ваш вопрос очень общий — он охватывает всю базовую инфраструктуру мобильного приложения. Я постараюсь быть как можно более конкретным —

1) Сделайте запрос http post в 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) Проверьте, какие данные существуют в основных данных => ничего не делать, а какие новые данные => сохранить новые данные в основных данных —

Вы можете сделать хороший звонок с отметкой времени и проверить, обновлены ли данные.
Если данные были обновлены — может быть сложно обновить отдельные атрибуты базовых данных. Что всегда работало для меня, так это удаление сервера 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() метод снова.

Надеюсь, это поможет.

2

Другие решения

Других решений пока нет …