How to get photos from camera roll?

落花浮王杯 提交于 2019-12-12 02:21:53

问题


I tried to use ALAssetLibrary to get albums and photos. This is my code:

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

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

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

I'm getting exc_bad_access on : [group enumarateAssetsUsingBlock:assetEnumerator] and the group is not nil.

The strange thing is that this code is working if I create a new project, but in my old project it's not working.

SDK version is iOS 4.3

Tested on iPhoneSimulator 4.3

Can anyone could give me an ideea of what's happening?

Thanks.


回答1:


As you crash on the one project but not on the other, are you sure the settings and configurations are appropriate?

In particular:

  • Check that the TARGET_DEPLOYMENT_OS is set to the minimum version the ALAsset framework is available.
  • Check that you have included all the requested frameworks (even if the linker should warn about this if you forgot to include it)

Moreover, the details of the crash (crashlog, exception details, ...) would be helpful if any.

Also are you sure the ALAssetLibrary isn't released before the enumeration (which is probably done asynchnously) ends? There is no release in your code in your question but maybe there is one in your real code?

AFAIK, enumerateGroupsWithTypes: executes its block on a secondary thread in an asynchrnous way (see this other question on SO), so that's probably your problem (you are trying to use a group that has been released from memory since you start your enumeration, you have to be sure the ALAssetLibrary is still in memory until the enumeration is done)



来源:https://stackoverflow.com/questions/7583909/how-to-get-photos-from-camera-roll

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!