我尝试使用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上测试
任何人都可以给我一个关于正在发生的事情的想法吗?
感谢。
答案 0 :(得分:2)
当您在一个项目上崩溃而在另一个项目上崩溃时,您确定设置和配置是否合适?
特别是:
此外,崩溃的详细信息(崩溃日志,异常详情......)如果有的话会有所帮助。
您是否确定在枚举(可能是异步完成)结束之前未发布ALAssetLibrary?您的问题代码中没有release
,但您的真实代码中可能有一个?
AFAIK,enumerateGroupsWithTypes:
以异步方式在辅助线程上执行其阻塞(请参阅this other question on SO),这可能是您的问题(您尝试使用自内存中释放的组)你开始枚举,你必须确保ALAssetLibrary仍然在内存中,直到枚举完成)