我尝试使用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 回答
当您在一个项目上崩溃而在另一个项目上崩溃时,您确定设置和配置是否合适?
特别是:
检查TARGET_DEPLOYMENT_OS是否设置为ALAsset框架可用的最低版本 .
检查您是否已包含所有请求的框架(即使链接器在您忘记包含它时也应该发出警告)
此外,崩溃的详细信息(崩溃日志,异常详细信息......)如果有的话会有所帮助 .
你还确定ALAssetLibrary在枚举(可能是异步完成)结束之前没有发布吗?您的问题代码中没有
release
但是您的真实代码中可能有一个?AFAIK,
enumerateGroupsWithTypes:
以异步方式在辅助线程上执行其块(请参阅this other question on SO),这可能是您的问题(您尝试使用自启动枚举后已从内存中释放的组,您必须确保在枚举完成之前,ALAssetLibrary仍然在内存中)