ALAssetsGroup становится недействительным

#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 * до того, как обработаем уведомление?