#objective-c #ios #alassetslibrary
#objective-c #iOS #alassetslibrary
Вопрос:
Я использую AssetsLibrary
фреймворк для сохранения ресурсов в определенный альбом ( ALAssetsGroup
).
Поскольку я использую ALAssetsGroup
(для альбома, в котором я хочу сохранить ресурсы) довольно часто, я решил, что было бы разумно сохранить его, чтобы мне не приходилось выполнять итерации (асинхронно) по группам каждый раз, когда мне это нужно.
При извлечении / создании альбома все отображается правильно (для valueForProperty:
), но через некоторое время группа, похоже, становится недействительной, и все ее свойства возвращаются nil
. Кроме того, addAsset:
это не сработает, поэтому мне приходится снова искать альбом (на этот раз поиск осуществляется по URL-адресу, но он по-прежнему асинхронный).
Есть ли способ обойти это (чтобы сохранить ALAssetsGroup
действительный)?
Это происходит на iOS 5, и библиотека ( ALAssetsLibrary
) также сохраняется. Я использую сеттер, чтобы убедиться, что я не сбрасываю group
себя.
Ответ №1:
Вам необходимо добавить наблюдателя для ALAssetsLibraryChangedNotification для вашей ALAssetsLibrary и после его получения повторно запросить любой из ваших кэшированных объектов AL *. Это будет опубликовано непосредственно перед тем, как отправленные объекты AL * станут недействительными.
Комментарии:
1. Спасибо, я только что вспомнил, что некоторое время назад у меня была аналогичная проблема, и мне приходилось перезагружать все ресурсы каждый раз, когда происходило изменение. Надеюсь, в будущем они создадут более совершенную систему.
2. ВАУ. ВАУ. ВАУ. Этот ответ спас меня от такой головной боли проблемы. Я пытался сохранить несколько фотографий в цикле в библиотеке ресурсов, когда внезапно группа, возвращенная из функции groupFromURL, станет недействительной. Он не был равен нулю, он просто потерял бы все свои свойства, как описано в OP. Я никогда не видел в документации ничего, что указывало бы на то, что это произойдет с объектом, передаваемым в блок завершения, СПАСИБО!!!!
3. но разве уведомления не асинхронны? Следовательно, не могли бы мы по-прежнему использовать объекты AL * до того, как обработаем уведомление?