首页 文章

如何从相机胶卷中获取照片?

提问于
浏览
0

我尝试使用ALAssetLibrary来获取相册和照片 . 这是我的代码:

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");
                         }];

我正在获取exc_bad_access:[group enumarateAssetsUsingBlock:assetEnumerator]并且该组不是nil .

奇怪的是,如果我创建一个新项目,这段代码是有效的,但在我的旧项目中它不起作用 .

SDK版本是iOS 4.3

在iPhoneSimulator 4.3上测试过

任何人都可以给我一个关于正在发生的事情的想法吗?

谢谢 .

1 回答

  • 2

    当您在一个项目上崩溃而在另一个项目上崩溃时,您确定设置和配置是否合适?

    特别是:

    • 检查TARGET_DEPLOYMENT_OS是否设置为ALAsset框架可用的最低版本 .

    • 检查您是否已包含所有请求的框架(即使链接器在您忘记包含它时也应该发出警告)

    此外,崩溃的详细信息(崩溃日志,异常详细信息......)如果有的话会有所帮助 .

    你还确定ALAssetLibrary在枚举(可能是异步完成)结束之前没有发布吗?您的问题代码中没有 release 但是您的真实代码中可能有一个?

    AFAIK, enumerateGroupsWithTypes: 以异步方式在辅助线程上执行其块(请参阅this other question on SO),这可能是您的问题(您尝试使用自启动枚举后已从内存中释放的组,您必须确保在枚举完成之前,ALAssetLibrary仍然在内存中)

相关问题