Является ли alassetslibrary от перечисленных групп: использование Block: affllock: «сломан» в iOS 4.3.4?

StackOverflow https://stackoverflow.com/questions/6806493

Вопрос

Я разрабатываю приложение для iOS, основанное на ALASSETSLibrary API (доступно с 4.0), я использую его для извлечения всех изображений и видео, сохраненных на устройстве, и это было довольно просто сделать это. В любом случае, как только я установил iOS 4.3.4 на свой iPhone 4, мой код перестал работать. Линия, которая вызывает выборочную, ничего не делает! Код является следующим (и он отлично работает на iOS 4.3.3):

ALAssetsLibrary *library = [[[ALAssetsLibrary alloc] init] autorelease];

ALAssetsGroupEnumerationResultsBlock assetsEnumerator = ^(ALAsset *result, NSUInteger index, BOOL *stop) { 
// handle asset
    };

ALAssetsLibraryGroupsEnumerationResultsBlock groupsEnumerator = ^(ALAssetsGroup *group, BOOL *stop) { 
// handle group
    };

    ALAssetsLibraryAccessFailureBlock failHandler = ^(NSError *error) {
// handle error
    };


[library enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:groupsEnumerator failureBlock:failHandler];

Кажется, что EnumerateGroupSWithTypes: используя Block: FuillBlock: Никогда не вызывайте, потому что ни один из моих блоков не выполняется ... и никакой ошибки не возникает! Почему? Что я могу сделать?

PS: я пытался изменить аргумент «типы», но это не проблема!

Это было полезно?

Решение

Я не понимаю, почему (Apple в этот момент я ненавижу вас!), Но Alassetslibrary в iOS 4.3.4 не позволяет выбирать в фоновой теме (я запускал серию NSOperations в NSOperationQueue) Я решил, создав небольшую обертку, используя performSelectorOnMainThread.

РЕДАКТИРОВАТЬ:

После рефакторинга кода и обновления до iOS 5 я наконец понял, что проблема фактически связана с тем, как работает Alassetslibrary, нет необходимости использовать performSelectorOnMainThread. Я написал пост об этом здесь.

Другие советы

Что -то очень важное:

Пользователь должен разрешить местоположение услуг для вашего приложения.

Как написано в Apple Doc для EnumerateGroupSwitHTYPES: используя Block: сбой BLOCK метод

Особые соображения

Этот метод потерпит неудачу с ошибкой AlassetSlibraryAccessGloballyDeniedError, если пользователь не включает службы местоположения (в настройках> Общие).

Может быть, вам следует обработать этот случай, отобразив предупреждение пользователю.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top