Я знаю, что это старая версия, но я долго мучился с этой проблемой и только что обнаружил, почему, так что, если кто-то случайно натолкнется на эту тему, вот она ...
Если вы используете метод getResourceValue:forKey:error:
NSURL, который, я полагаю, вы используете, потому что вы упомянули об использовании NSURLUbiquitousItemIsUploadedKey
, вы можете увидеть файлы , по-видимому , не загружаемые, потому что NSURL кэширует значение ресурса при особых обстоятельствах.
Не упоминается нигде в основных документах, но если вы погрузитесь в NSURL.h, вы найдете следующий странно сформулированный драгоценный камень, который стоит прочитать полностью, чтобы дать возможность понять последствия:
Поведение кэширования значения ресурса немного отличается между
API NSURL и CFURL.
Когда методы NSURL, которые получают, устанавливают или используют кэшированные значения ресурсов
используются из основного потока, значения ресурсов кэшируются URL
(за исключением тех, которые добавлены как временные свойства) становятся недействительными следующие
время выполнения цикла выполнения основного потока.
Функции CFURL не очищают автоматически значения ресурсов
кэшируется по URL. Клиент имеет полный контроль над кешем
продолжительность жизни. Если вы используете CFURL API, вы должны использовать
CFURLClearResourcePropertyCacheForKey или
CFURLClearResourcePropertyCache для очистки кэшированных значений ресурсов.
Возвращает значение ресурса, указанное данным ключом ресурса. это
Сначала метод проверяет, кэширует ли ресурс объект уже
значение. Если это так, он возвращает кэшированное значение ресурса вызывающей стороне. Если
нет, тогда этот метод синхронно получает значение ресурса из
резервное хранилище добавляет значение ресурса в кэш объекта URL,
и возвращает значение ресурса вызывающей стороне. Тип ресурса
значение зависит от свойства ресурса (см. определения ключа ресурса). Если
этот метод возвращает YES и значение заполняется нулем, это означает, что
свойство ресурса недоступно для указанного ресурса и отсутствует
Произошли ошибки при определении свойства ресурса не было
имеется в наличии. Если этот метод возвращает NO, заполняется необязательная ошибка.
Этот метод в настоящее время применим только к URL для файловой системы
Ресурсы. Символ присутствует в iOS 4, но не выполняет никаких операций.
В основном, если вы используете getResourceValue: на любой поток, отличный от основного потока , он будет кэшировать первый результат и возвращать этот же результат вам снова и снова . Интуитивно понятно, а? Как вы думаете, такие вещи будут отмечены жирным шрифтом в документах, а не скрыты в заголовке ...
Для меня это проявилось в том, что устройства иногда «зависали», поскольку они думали, что определенный URL-адрес не загружается, хотя в действительности это было много лет назад. Перезапуск приложения часто появился , чтобы решить эту проблему. Принудительное выполнение getResourceValue:forKey:error:
только на главном потоке окончательно избавилось от этого рывка одним махом.