5

ALAssetsLibrary api(4.0以降で利用可能)に基づくiOSアプリを開発しています。これを使用して、デバイスに保存されているすべての画像とビデオを取得します。これは非常に簡単です。とにかく、iPhone4にiOS4.3.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:usingBlock:failureBlock:呼び出されないようです。これは、ブロックが実行されていないためです...エラーは発生しません。なんで?私に何ができる?

ps:「types」引数を変更しようとしましたが、それは問題ではありません!

4

2 に答える 2

8

理由はわかりませんが(Appleは今のところあなたを嫌っています!)、iOS 4.3.4のALAssetsLibraryはバックグラウンドスレッドでのフェッチを許可していません(私はのシリーズを実行していNSOperationsましたNSOperationQueue)。を使用して小さなラッパーを作成することで解決しましたperformSelectorOnMainThread

編集:

コードのリファクタリングとiOS5へのアップグレードの後、問題は実際にはALAssetsLibraryの動作に関連しているので、を使用する必要がないことにようやく気づきましたperformSelectorOnMainThreadここに投稿しました

于 2011-07-24T12:08:51.177 に答える
0

非常に重要なこと:

ユーザーは、アプリの位置情報サービスを許可する必要があります。

enumerateGroupsWithTypes:usingBlock:failureBlockメソッドのアップルドキュメントに書かれているように。

特別な考慮事項

ユーザーが位置情報サービスを有効にしていない場合([設定]> [一般]で)、このメソッドはエラーALAssetsLibraryAccessGloballyDeniedErrorで失敗します。

たぶん、ユーザーにアラートを表示することでこのケースを処理する必要があります。

于 2012-01-15T18:45:50.443 に答える