0

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

void (^assetEnumerator)(struct ALAsset *, NSUInteger, BOOL *) = ^(ALAsset *result, NSUInteger index, BOOL *stop) {
        如果(结果!= NULL){
            NSLog(@"查看资产:%@", 结果);
        }
    };

    void (^assetGroupEnumerator)(struct ALAssetsGroup *, BOOL *) = ^(ALAssetsGroup *group, BOOL *stop) {
        如果(组!=零){
            [组 enumerateAssetsUsingBlock:assetEnumerator];
        }
    };

    ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
    [库枚举GroupsWithTypes:ALAssetsGroupAll
                           usingBlock:assetGroupEnumerator
                         失败块:^(NSError *error) {
                             NSLog(@"失败");
                         }];

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

奇怪的是,如果我创建一个新项目,这段代码就可以工作,但在我的旧项目中它却不工作。

SDK版本为iOS 4.3

在 iPhoneSimulator 4.3 上测试

谁能告诉我发生了什么?

谢谢。

4

1 回答 1

2

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

尤其是:

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

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

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

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

于 2011-09-28T14:04:57.017 回答