Я пишу приложение для iOS с Parse, которое имеет два уровня: бесплатный и подписка. Уровень бесплатного пользования не поддерживает сохранение созданных объектов в облаке, в отличие от уровня подписки. То есть пользователь может загрузить и использовать приложение бесплатно столько, сколько захочет, и в течение этого времени создавать постоянные объекты устройства, которые позже будут загружены, если они решат подписаться или войти в систему.
У меня проблемы с уровнем бесплатного пользования без подключения к сети.
Для разработки этого уровня я использую локальное хранилище данных Parse. Допустим, пользователь создает UserData
PFObject
:
let newUserData = PFObject.objectWithClassName("UserData")
newUserData["someUserDataKey"] = "abc"
newUserData.pinInBackground()
Эта часть в порядке. Я могу запрашивать UserData
объекты локального хранилища данных и создавать, скажем, табличное представление. Проблема, с которой я сталкиваюсь, заключается в том, что пользователь позже изменяет значение одного из этих объектов:
// aUserData is an instance of PFObject which has already
// been pinned to the local datastore
aUserData["someUserDataKey"] = "xyz"
Затем я не вызываю какую-либо версию aUserData.save()
, так как не сохраняю их в облаке Parse. В остальное время приложение открыто, все контроллеры представления, которые отображают измененное aUserData
, будут правильно видеть xyz
для значения someUserDataKey
, как и ожидалось.
Однако, если я выйду из приложения из режима многозадачности и снова открою его, aUserData
вернется к abc
для someUserDataKey
. Я не ожидал, что это произойдет; вместо этого я предполагал, что изменения объектов в локальном хранилище данных сохранятся. Я также думаю, что странно, что он сохраняется до перезапуска приложения, но не после.
Я нашел обходной путь для проблемы, заключающийся в вызове aUserData.pin()
после внесения любых изменений в объект. Я не уверен, зачем это нужно, и вообще, каково ожидаемое поведение при повторном вызове pin()
для уже закрепленного объекта.
Каковы наилучшие практики для такого рода настроек?