Est les enumerateGroupsWithTypes de ALAssetsLibrary: usingBlock: failureBlock: « cassé » dans iOS 4.3.4?

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

Question

Je développe une application iOS qui est basé sur ALAssetsLibrary api (disponible depuis 4.0), je l'utilise pour récupérer toutes les images et les vidéos enregistrées sur l'appareil et il a été assez simple de le faire. Quoi qu'il en soit, dès que j'ai installé iOS 4.3.4 sur mon iPhone 4, mon code a cessé de fonctionner. La ligne qui invoque la fetching ne fait rien! Le code est le suivant (et il fonctionne très bien sur 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];

il semble que enumerateGroupsWithTypes: usingBlock: failureBlock: ne sont jamais appelés, parce qu'aucun de mes blocs sont exécutés ... et aucune erreur est élevé! Pourquoi? Que puis-je faire?

ps: j'ai essayé de changer l'argument "types", mais ce n'est pas le problème

Était-ce utile?

La solution

I don't understand why (Apple in this moment I'm hating you!), but ALAssetsLibrary in iOS 4.3.4 does not allow fetching in a background thread (I was running a series of NSOperations in a NSOperationQueue). I solved by creating a little wrapper using performSelectorOnMainThread.

EDIT:

After a code refactoring and the upgrade to iOS 5, I finally realized that the problem is actually related to how ALAssetsLibrary works, there is no need to use performSelectorOnMainThread. I wrote a post on it here.

Autres conseils

Something very important:

The user must allow location services for your app.

As written in apple doc for enumerateGroupsWithTypes:usingBlock:failureBlock method.

Special Considerations

This method will fail with error ALAssetsLibraryAccessGloballyDeniedError if the user has not enabled Location Services (in Settings > General).

Maybe you should handle this case by displaying an alert to the user.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top