UIDocument автосохранение не работает
У меня есть собственный подкласс UIDocument, который я использую для хранения контента пользователя для моего приложения. Я звоню -[UIDocument updateChangeCount:UIDocumentChangeDone]
непосредственно для отслеживания изменений в документе. Сохранение и загрузка работают нормально, но документ никогда не сохраняется автоматически. Почему это происходит?
1 ответ
Оказывается, проблема была в том, что я не звонил -[UIDocument updateChangeCount:]
из основного потока. Несмотря на то, что UIDocument не является элементом пользовательского интерфейса, он все еще является частью UIKit
и поэтому обычные предостережения о всегда взаимодействовать с UIKit
классы из основного потока все еще применяются.
Упаковка кода в отправку в основную очередь исправила проблему:
dispatch_async(dispatch_get_main_queue(), ^{
[doc updateChangeCount:UIDocumentChangeDone];
});
Во-первых, обновленная информация об ответе Джейсона для Swift:
DispatchQueue.main.async {
doc.updateChangeCount(.done)
}
Это прекрасно работает, если вы просто звоните в одном или двух местах. Однако, если у вас есть несколько вызовов и существует вероятность того, что они находятся в фоновых потоках, это может быть выгодно для подкласса UIDocument
и переопределить updateChangeCount(:)
Функция так, чтобы вы осуществили основной вызов. В противном случае вы становитесь ответственным за каждый раз основной вызов, что может привести к потенциальной пропущенности, что приведет к попаданию документа в saveError
государство.
Затем в вашем подклассе будет переопределение:
override func updateChangeCount(_ change: UIDocumentChangeKind) {
DispatchQueue.main.async {
super.updateChangeCount(change)
}
}