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

时间:2011-09-28 13:22:46

标签: iphone ios exc-bad-access alassetslibrary

我尝试使用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 个答案:

答案 0 :(得分:2)

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

特别是:

  • 检查TARGET_DEPLOYMENT_OS是否设置为ALAsset框架可用的最低版本。
  • 检查您是否已包含所有请求的框架(即使链接器在您忘记包含它时也应该发出警告)

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

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

AFAIK,enumerateGroupsWithTypes:以异步方式在辅助线程上执行其阻塞(请参阅this other question on SO),这可能是您的问题(您尝试使用自内存中释放的组)你开始枚举,你必须确保ALAssetLibrary仍然在内存中,直到枚举完成)