5

次のコードを使用してAssetsLibraryFrameworkを使用してiPhoneライブラリのビデオにアクセスしようとしています...しかし、アプリケーションを実行すると、コードが機能しません...配列アセットはまだ空ですか?私は何が間違っているのですか?

ちなみに、私のiPhoneはiPhone 4.1にアップグレードされた3Gです(ただし、アセットフレームワークはエラーを出していません)

NSMutableArray *assets = [[NSMutableArray alloc]init];
ALAssetsLibrary *library = [[ALAssetsLibrary alloc]init];

void (^assetEnumerator)(struct ALAsset *, NSUInteger, BOOL *) = ^(ALAsset *result, NSUInteger index, BOOL *stop) {
        if(result != NULL) {
                NSLog(@"See Asset: %@", result);
                [assets addObject:result];
            }
        };

    void (^assetGroupEnumerator)(struct ALAssetsGroup *, BOOL *) =  ^(ALAssetsGroup *group, BOOL *stop) {
        if(group != nil) {NSLog(@"dont See Asset: ");
                [group enumerateAssetsUsingBlock:assetEnumerator];
            }
        };

    assets = [[NSMutableArray alloc] init];
    library = [[ALAssetsLibrary alloc] init];
    [library enumerateGroupsWithTypes:ALAssetsGroupAlbum
                           usingBlock:assetGroupEnumerator
                         failureBlock: ^(NSError *error) {
                                 NSLog(@"Failure");
                             }];
4

4 に答える 4

5

4.1 のアップグレードにより、画像ピッカーの例の一部が「壊れた」ようです。投稿したコードの後に​​実行される次の行を確認してください。

NSUInteger groupTypes = ALAssetsGroupAlbum | ALAssetsGroupEvent | ALAssetsGroupFaces;
[assetsLibrary enumerateGroupsWithTypes:groupTypes usingBlock:listGroupBlock failureBlock:failureBlock];

これにより、4.1 iPhone とシミュレーターの両方でアセットがゼロになります。ただし、groupTypes を変更すると役立つので、設定します

 NSUInteger groupTypes = ALAssetsGroupAll;

いくつかのアセットが表示されるはずです。

于 2010-10-26T19:03:09.547 に答える
2

私はこれをXcode4.1、IOS5で行いました。

ALAssetsGroupEnumerationResultsBlock assetEnumerator = ^(ALAsset *result, NSUInteger index, BOOL *stop) {
    if(result != NULL) {
        NSLog(@"See Asset: %@", result);
        [assets addObject:result];
    }
};

ALAssetsLibraryGroupsEnumerationResultsBlock assetGroupEnumerator = ^(ALAssetsGroup *group, BOOL *stop) {
    if(group != nil) {NSLog(@"dont See Asset: ");
        [group enumerateAssetsUsingBlock:assetEnumerator];
    }
};

assets = [[NSMutableArray alloc] init];
library = [[ALAssetsLibrary alloc] init];
[library enumerateGroupsWithTypes:ALAssetsGroupAlbum
                       usingBlock:assetGroupEnumerator
                     failureBlock: ^(NSError *error) {
                         NSLog(@"Failure");
                     }];

それは私のために働いた。

于 2012-02-28T03:10:31.140 に答える
1

ダブル初期化:

 NSMutableArray *assets = [[NSMutableArray alloc]init];
 ALAssetsLibrary *library =[[ALAssetsLibrary alloc]init];

 void (^assetEnumerator)(struct ALAsset *, NSUInteger, BOOL *) = ^(ALAsset *result, NSUInteger index, BOOL *stop) {
 if(result != NULL) {
      NSLog(@"See Asset: %@", result);
      [assets addObject:result];

        }
};

void (^assetGroupEnumerator)(struct ALAssetsGroup *, BOOL *) =  ^(ALAssetsGroup *group, BOOL *stop) {
    if(group != nil) {NSLog(@"dont See Asset: ");
            [group enumerateAssetsUsingBlock:assetEnumerator];
    }
};

   assets = [[NSMutableArray alloc] init];
   library = [[ALAssetsLibrary alloc] init**];
   [library enumerateGroupsWithTypes:ALAssetsGroupAlbum
                       usingBlock:assetGroupEnumerator
                     failureBlock: ^(NSError *error) {
                             NSLog(@"Failure");
                         }];
于 2010-10-24T12:47:35.280 に答える
0

ELC Image Picker Controller を使用していますが、既に ALAssetsGroupAll を使用していますが、まだビデオが表示されません。

アセットフィルターを追加することでこれを解決しました。ビデオ、写真、またはその両方に制限できます。写真のみがデフォルトだったと思います。上記が失敗した場合は、次の行を検討してください。

[assetGroup setAssetsFilter:[ALAssetsFilter allAssets]];
于 2012-02-27T13:19:13.163 に答える