Как я могу улучшить сохранение данных в Swift?

#ios #swift

#iOS #swift

Вопрос:

Мне наконец-то удалось запустить учебное приложение Apple Food Tracker, хотя и с использованием совершенно другого подхода к управлению рейтингом. Для тех, кто не знаком с приложением, оно позволяет создавать и редактировать простой массив записей «питание».

Чтобы ускорить работу приложения, я сохраняю данные в файл только при закрытии приложения, а не при каждом добавлении, редактировании или удалении элемента.

Проблема в том, что сохранение кажется довольно медленным, даже всего с тремя из четырех элементов. Если я снова открою приложение слишком скоро после закрытия, данные вернутся к предыдущему сохранению.

Вот моя функция сохранения в контроллере табличного представления, который содержит модель данных:

 public func saveMeals() {
    let isSuccessfulSave = NSKeyedArchiver.archiveRootObject(meals, toFile: Meal.ArchiveURL.path)
    if !isSuccessfulSave {
        print("Failed to save meals")
    }
}
  

И вот вызов из AppDelegate:

 func applicationWillTerminate(_ application: UIApplication) {
    // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.

    if let rootViewController = window?.rootViewController as? UINavigationController {
        if let viewController = rootViewController.viewControllers.first as? MealTableViewController {
            viewController.saveMeals()
        }
    }

}
  

Есть ли лучший и быстрый способ сохранения или я могу запретить приложению закрываться до завершения сохранения? Спасибо за любые предложения.

Редактировать: Похоже, что иногда функция сохранения не вызывается. Как это может быть, если я всегда закрываю приложение с видимым контроллером табличного представления?

Комментарии:

1. С о р е Д а т а

2. Не уклоняйтесь от Core Data. Это отличный фреймворк.

3. Спасибо, Лео, я записался на онлайн-курс, который среди прочего охватывает основные данные. Просто из интереса я заставил приложение Food Tracker работать лучше, переместив функцию сохранения в applicationDidEnterBackground.