Я начинаю пытаться добавить поддержку сохранения и восстановления состояния в свое приложение iOS, в котором есть компонент Core Data, к которому я обращаюсь через UIManagedDocument.
Я начинаю добавлять идентификаторы восстановления в свои контроллеры представления и подключаю необходимые функции (в настоящее время пустые) в моем AppDelegate и контроллерах.
У меня есть объект, на который потенциально могут ссылаться несколько контроллеров представления, поэтому я планирую попытаться сохранить и восстановить его в моем AppDelegate и просто попросить соответствующие контроллеры представления получить объект из AppDelegate. Время для этого может быть сложным, поскольку метод делегата приложения didRecodeRestorableState возникает после того, как все представления уже вызвали свои собственные методы decodeRestorableStateWithCoder.
Однако моя главная проблема заключается в том, что этот общий класс, а также несколько ViewControllers хотят, чтобы свойства NSManagedObject сохранялись и восстанавливались. Я надеюсь, что смогу использовать URIRepresentation объекта для облегчения этого, но проблема, с которой я столкнулся, заключается в том, что мой AppDelegate откроет мой UIManagedDocument в методе willFinishLaunchingWithOptions моего AppDelegate. Это делается с помощью метода UIManagedDocument openWithCompletionHandler. Из-за многопоточности этого открытия документ успешно открывается после того, как все мои представления и делегат приложения уже пытались восстановить свое сохраненное состояние. AppDelegate отправляет уведомление, как только документ готов к использованию, поэтому все мои контроллеры представления могут прослушивать это уведомление.
Думаю, мне просто интересно, это лучшая или даже единственная стратегия для решения этой проблемы. Моим объектам нужно будет удерживать URIRepresentations, которые они восстанавливают, и только после того, как документ (и его NSManagedObjectContext) будет готов, попытаться найти и установить соответствующие NSManagedObjects, которые они сохранили. Таким образом, восстановление происходит намного позже, чем вызовы для выполнения восстановления, как я полагаю, обычно выполняют всю свою работу по восстановлению. Меня беспокоит, может ли контроллер потенциально казаться пустым в течение короткого периода времени, пока он ожидает открытия документа, а затем правильно инициализируется.
Есть ли какая-либо цель в блокировании и задержке открытия моего документа в этом случае, так что да, приложение открывается дольше, но может, по крайней мере, более правильно восстановить все данные, необходимые до появления каких-либо представлений. Запускаются ли какие-либо таймеры, чтобы определенные методы не занимали слишком много времени? Было бы более правильно показать другой вид, пока мы находимся в этом состоянии неопределенности, не совсем уверен, как это сделать, но это то, что вы можете увидеть в других приложениях, например, в приложении Facebook, которое зависит от сети. связь.
Пока что я не могу найти реального объяснения такого рода проблем в документации.
Любая помощь, как всегда, очень ценится! Ваше здоровье