в моем быстром приложении 2 пользователь может сохранять данные в основных данных. в будущем я хотел бы понять, что данные будут сохраняться в основных данных и в базе данных MYSQL.
как лучше всего синхронизировать данные между основными данными и mysql
моя идея состояла в том, что при каждом запуске приложения начнется процесс:
это лучший и быстрый способ сделать это?
Существует не быстрый способ, но я могу определенно предложить что-то, что работает для меня. Лучше или нет – решать вам.
Также ваш вопрос очень общий – поскольку он охватывает всю внутреннюю инфраструктуру мобильного приложения. Я постараюсь быть настолько конкретным, насколько могу,
1) Сделайте запрос на отправку http в файл php, который отображает все данные базы данных mysql и возвращает результат в приложение –
Как только вы получите результат, вы можете проанализировать его в Core Data, как пример ниже –
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) Проверьте, какие данные существуют в основных данных => ничего не делать, и какие данные являются новыми => сохранять новые данные в основных данных –
Вы можете сделать хороший вызов головы с помощью отметки времени и проверить, были ли данные обновлены. Если данные были обновлены – это может привести к небольшому сложному обновлению отдельных атрибутов Core Data. То, что всегда работало для меня, – это удаление бэкэнд 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()
.
Надеюсь, это поможет.