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

我试图使用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];
     [库enumerateGroupsWithTypes:ALAssetsGroupAll
                            usingBlock:assetGroupEnumerator
                          failureBlock:^(NSError * error){
                             的NSLog(@ “失败”);
                          }];

我得到exc_bad_access:[组enumarateAssetsUsingBlock:assetEnumerator]和组不是零。

奇怪的是,这个代码工作,如果我创build一个新的项目,但在我的旧项目,它不工作。

SDK版本是iOS 4.3

在iPhoneSimulator 4.3上testing

任何人都可以给我一个发生什么事情的想法?

谢谢。

当你在一个项目上崩溃而不在另一个上时,你确定这些设置和configuration是否合适?

尤其是:

  • 检查TARGET_DEPLOYMENT_OS是否设置为ALAsset框架可用的最低版本。
  • 检查你是否包含了所有需要的框架(即使链接器在你忘记包含它的情况下也会提醒你)

而且,崩溃的细节(crashlog,exception细节,…)将会有帮助。

你也确定ALAssetLibrary在枚举(可能是asynchronous完成)之前没有被释放吗? 在你的代码中没有你的代码release ,但也许有一个在你的真实代码?

AFAIK, enumerateGroupsWithTypes:在一个辅助线程上以asynchronous的方式执行它的块( 在SO上看到这个问题 ),所以这可能是你的问题(你正在尝试使用一个从你开始枚举以来已经从内存中释放的组,必须确保ALAssetLibrary在枚举完成之前仍然在内存中)