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

标签 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 上测试

谁能告诉我发生了什么事?

谢谢。

最佳答案

当您在一个项目上崩溃但在另一个项目上没有崩溃时,您确定设置和配置合适吗?

特别是:

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

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

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

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

关于iphone - 如何从相机胶卷中获取照片?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7583909/

相关文章:

IOS XCode 放置视频文件的正确位置

iPhone Objective-C 自动发布泄露

iphone - 设置 UITableViewCell 的动态高度,其中仅包含图像(可变高度)

ios - 将 Objective-C 动态绑定(bind)转换为 swift 2

ios - 带有ARC的UITableView上的EXC_BAD_ACCESS错误?

iphone - EXC_BAD_ACCESS 无法想象的错误

ios - fetchedResultsController fetchedObjects 返回 NSCFString 而不是 NSArray

ios - UILabel 动态高度顶部和底部额外边距

iphone - 如何在NavigationController中推送WebView

ios - 当 3DTouch 主屏幕快速操作出现时,会调用哪一种应用程序生命周期方法?