Часть моего кода представляет пользователю страницу резервного копирования/восстановления, которая использует NSMetaDataQuery для обновления графического интерфейса. для загружаемых или скачиваемых файлов.
На каждом устройстве, где я запускаю код, все работает как положено, ЗА ИСКЛЮЧЕНИЕМ одного — iPhone 11 под управлением iOS 17.5; после запуска запроса я получаю следующую ошибку:
[ОШИБКА] не удалось получить идентификаторы удаленных операций: NSError: Cocoa 257 «Файл не может быть открыт, потому что у вас нет разрешения на его просмотр."
"От демона возвращена ошибка: Error Domain=com.apple.accounts Code=7 "(null)""
Из-за этой ошибки я не получаю обновления запросов и, следовательно, не могу отобразить, нужно ли загружать, загружать или синхронизировать файл.
Я не инициирую загрузку или загрузку файла. файл резервной копии, поскольку он помещен в вездесущий контейнер, и я оставляю загрузку/загрузку файла IOS; все, что я делаю с запросом, это отслеживаю состояние файла и предпринимаю соответствующие действия, чтобы показать пользователю процент загруженного/загруженного файла.
Как было сказано ранее, это только одно устройство, вызывающее У меня болит голова, поэтому я не знаю, связано ли это как-то с IOS 17.5, когда Apple внесла изменения, о которых я не знаю. У меня есть доступ к iPhone и iPad под управлением какой-либо версии IOS 16, и он работает безупречно.
запуск метода startAccessingSecurityScopedResource(), который был предложен некоторыми, возвращает «истину» в симуляторе. и «false» на устройстве, но даже тогда все устройства работают, кроме одного; так что, похоже, это не решение.
Изменение предиката запроса тоже не помогло.
Как мне детализировать, чтобы найти виновника - я в замешательстве.
Мой очень простой инициализатор и запуск запроса:
Код: Выделить всё
func initialiseQuery() {
query = NSMetadataQuery.init()
query.operationQueue = .main
query.searchScopes = [NSMetadataQueryUbiquitousDocumentsScope]
query.predicate = NSPredicate(format: "%K LIKE %@", NSMetadataItemFSNameKey, fileUrl.lastPathComponent)
query.operationQueue?.addOperation({ [weak self] in
self?.query.start()
self?.query.enableUpdates()
})
}
Вчера вечером мне удалось ускользнуть с телефоном жены, обновил его с IOS 16* до IOS 17.5.1 и ' viola', возникла та же проблема, поэтому я решил, что это должно быть что-то с IOS...или нет.
Я снова углубился в NSPredicate и после некоторых изменений выдал следующее теперь работает:
NSPredicate(format: "%K == %@", NSMetadataItemPathKey, fileUrl.relativePath)
--И теперь это работает --
Вышеупомянутая ошибка все еще присутствует на устройстве, но в обозримом будущем я могу игнорировать ее.
И функция startAccessingSecurityScopedResource() теперь возвращает значение true.
Подробнее здесь: https://stackoverflow.com/questions/785 ... ldnt-fetch
Мобильная версия