Является ли alassetslibrary от перечисленных групп: использование Block: affllock: «сломан» в iOS 4.3.4?
-
25-10-2019 - |
Вопрос
Я разрабатываю приложение для 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, если пользователь не включает службы местоположения (в настройках> Общие).
Может быть, вам следует обработать этот случай, отобразив предупреждение пользователю.