Pregunta

Estoy desarrollando una aplicación iOS que se basa en la API de AlassetsLibrary (disponible desde 4.0), la uso para recuperar todas las imágenes y videos guardados en el dispositivo y ha sido bastante simple hacerlo. De todos modos, instalé iOS 4.3.4 en mi iPhone 4, mi código dejó de funcionar. ¡La línea que invoca la búsqueda no hace nada! El código es el siguiente (y funciona bien en 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];

parece que EnumerateGroupswithTypes: Usingblock: failsblock: Nunca se llame, porque ninguno de mis bloques se ejecuta ... ¡y no se plantea ningún error! ¿Por qué? ¿Que puedo hacer?

PD: Traté de cambiar el argumento de "tipos", ¡pero ese no es el problema!

¿Fue útil?

Solución

No entiendo por qué (Apple en este momento te odio!), Pero alassetslibrary en iOS 4.3.4 no permite buscar en un hilo de fondo (estaba ejecutando una serie de NSOperations en un NSOperationQueue). Me resolví creando un pequeño envoltorio usando performSelectorOnMainThread.

EDITAR:

Después de una refactorización de código y la actualización a iOS 5, finalmente me di cuenta de que el problema en realidad está relacionado con cómo funciona alassetslibrary, no hay necesidad de usar performSelectorOnMainThread. Escribí una publicación aquí.

Otros consejos

Algo muy importante:

El usuario debe Permitir servicios de ubicación para tu aplicación.

Como está escrito en Apple Doc para EnumerateGroupswithPes: Usingblock: failsblock método.

Consideraciones Especiales

Este método fallará con el error AlassetsLibraryAccessGloballyDeniedError si el usuario no ha habilitado los servicios de ubicación (en Configuración> General).

Tal vez debería manejar este caso mostrando una alerta al usuario.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top