2011-09-28 153 views
0

我试图使用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:[组enumarateAssetsUsingBlock:assetEnumerator]和组不为零。

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

SDK版本的iOS 4.3

测试在iPhoneSimulator 4.3

谁能能给我发生了什么事的IDEEA?

谢谢。

回答

2

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

特别是:

  • 检查TARGET_DEPLOYMENT_OS设置为最低版本ALAsset框架可用。
  • 检查是否已包括了所有要求的框架(即使链接应该警告,如果你忘了,包括它)

此外,崩溃(系统崩溃日志,异常细节的细节,... )会有帮助,如果有的话。

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

据我所知,enumerateGroupsWithTypes:执行上的asynchrnous方式(见this other question on SO)辅助线程的块,所以这可能是你的问题(你正在尝试使用已经从内存中释放一组,因为你开始你的枚举,你有确保ALAssetLibrary在枚举完成之前仍在内存中)

相关问题