Frage

Ich entwickle eine iOS -App, die auf AlassetSlibrary -API (seit 4.0 verfügbar) basiert. Ich verwende sie, um alle auf dem Gerät gespeicherten Bilder und Videos abzurufen, und es war ziemlich einfach, dies zu tun. Wie schnell ich iOS 4.3.4 auf meinem iPhone 4 installierte, wurde mein Code nicht mehr funktioniert. Die Linie, die das Abrufen hervorruft, tut nichts! Der Code ist der folgende (und er funktioniert gut auf 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];

Es scheint, dass EnumerateGroupswithtypes: useBlock: fehlerblock: Nie angerufen werden, weil keiner meiner Blöcke ausgeführt wird ... und kein Fehler wird aufgeworfen! Wieso den? Was kann ich machen?

PS: Ich habe versucht, das Argument "Typen" zu ändern, aber das ist nicht das Problem!

War es hilfreich?

Lösung

Ich verstehe nicht warum (Apfel in diesem Moment hasse ich Sie!), Aber AlassetSlibrary in iOS 4.3.4 erlaubt nicht das Abrufen in einem Hintergrund -Thread (ich habe eine Reihe von einer Reihe von ausgeführt NSOperations in einem NSOperationQueue). Ich habe gelöst, indem ich mit einem kleinen Wrapper mithilfe von Verwendung erstellt wurde performSelectorOnMainThread.

BEARBEITEN:

Nachdem ein Code -Refactoring und das Upgrade auf iOS 5 endlich festgestellt wurde, dass das Problem tatsächlich damit zusammenhängt, wie AlassetSlibrary funktioniert performSelectorOnMainThread. Ich habe hier einen Beitrag dazu geschrieben.

Andere Tipps

Etwas sehr Wichtiges:

Der Benutzer muss Standortdienste zulassen für Ihre App.

Wie in Apple Doc für geschrieben für EnumerateGroupswithtypes: useBlock: fehlerblock Methode.

Besondere Überlegungen

Diese Methode fällt mit fehlerfreien AlassetSlibraryAccessGloballyDenedError fehl, wenn der Benutzer keine Standortdienste aktiviert hat (in Einstellungen> allgemein).

Vielleicht sollten Sie diesen Fall bearbeiten, indem Sie eine Warnung an den Benutzer anzeigen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top