2012-12-13 2 views
2

У меня есть приложение iOS, которое реализует пользовательский подкласс UIDocument, который инкапсулирует файловую оболочку на пакет данных, архивных объектов и изображений. Первоначально я преобразовал реализацию в UIDocument для поддержки iCloud, но она была слишком ненадежной и поэтому я вынимаю часть iCloud и просто использую UIDocument с локальным хранилищем.Почему loadFromContents вызываются после автосохранения моего UIDocument?

Когда пользователь изменяет данные, я отправляю updateChangeCount: в экземпляр UIDocument, и он периодически автосохраняется в фоновом режиме. Я закрываю документ только тогда, когда приложение переходит в фоновый режим. Я обнаружил, что после автосохранения, который вызывает мой метод contentForType для UIDocument, также вызывается loadFromContents. Я не понимаю этого логически, и это также вызывает проблемы с моим интерфейсом.

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

Так что же я делаю неправильно, чтобы вызвать такое поведение? Я хотел бы иметь сохранение, не инициировать loadFromContents или понять, как справиться с этим поведением.

Спасибо!

ответ

2

Я обнаружил, что такое поведение было каким-то образом связано с некоторыми @синхронизованными вызовами, которые у меня были обернуты contentForType и writeContents: методы с начальной реализацией для предотвращения сбоев при закрытии документа несохраненными изменениями. Я получал два близких к одновременным вызовам contentForType, которые вызывали плохие ошибки доступа.

Я нашел более чистый способ предотвратить эти сбои, установив updateChangeCount: UIDocumentChangeCleared перед закрытием документа.

Смежные вопросы