iOS - кэшированные данные, используемые ALAssetsLibrary, не обновляются - PullRequest
1 голос
/ 27 марта 2012

Кажется, у меня проблемы с кешированием в ALAssetLibrary при тестировании моего приложения на iPhone.

Шаги, использованные для создания этой проблемы

  1. Сделайте снимок с помощью камеры iPhone
  2. Доступ к Фотопленке с помощью ALAssetsLibrary (через ELCImagePicker )

Проблема в том, что когда ELCImagePicker отображает список альбомов, миниатюра фотографии, сделанной на шаге 1, отображается для альбома Camera Roll (что правильно), но когда я захожу в альбом Camera Roll, эта фотография не там. Подобная ошибка также отображается в журнале консоли:

Cached count is off for 0x2391d0 <x-coredata://D226A7C3-95D5-40B3-BCFB-726E534AB57A/Album/p1> (1357 != 1358) moc=<PLManagedObjectContext: 0x63794c0>

1357 и 1358, кажется, соответствуют количеству фотографий до и после того, как я делаю фотографию, и закрытие средства выбора изображений и открытие его снова не помогают. Но если я переключаюсь на приложение «Фотографии», то там отображается фотография. И когда я возвращаюсь к своему приложению, фотография теперь также отображается.

Я пробовал оба

UIImageWriteToSavedPhotosAlbum ( UIImage *image, id completionTarget, SEL completionSelector, void *contextInfo );

и ALAssetsLibrary's

(void)writeImageToSavedPhotosAlbum:(CGImageRef)imageRef orientation:(ALAssetOrientation)orientation completionBlock:(ALAssetsLibraryWriteImageCompletionBlock)completionBlock

но ни один не работает. Любая помощь очень ценится. Спасибо!

1 Ответ

0 голосов
/ 26 мая 2012

Вы можете прослушать ALAssetsLibraryChangedNotification уведомление.

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reloadAlbumGroups) name:ALAssetsLibraryChangedNotification object:nil];

В reloadAlubmGroups загрузить группы альбомов из библиотеки ресурсов для получения обновленных объектов.


Документация Apple:

ALAssetsLibraryChangedNotification

Отправляется, когда содержимое библиотеки ресурсов изменилось из-под приложения, использующего данные.Получив это уведомление, вы должны отказаться от любой кэшированной информации и снова запросить библиотеку ресурсов.Вы должны считать недействительными любые объекты ALAsset, ALAssetsGroup или ALAssetRepresentation, на которые вы ссылаетесь после завершения обработки уведомления.

В iOS v4.0 объект уведомления равен nil.В iOS v4.1 и позже, объект уведомления - это объект библиотеки, который разместил уведомление.

...