iOS - 多次调用ALAssetsLibrary时的错误访问

时间:2014-11-09 13:41:15

标签: ios iphone uiimagepickercontroller exc-bad-access alassetslibrary

当用户从iPhone图库上传图片时,我会使用ALAssetsLibrary提取位置:

ALAssetsLibrary* assetslibrary = [[ALAssetsLibrary alloc] init];
            [assetslibrary assetForURL:urlPhoto
                           resultBlock:^(ALAsset *asset) {
                               CLLocation *location = [asset valueForProperty:ALAssetPropertyLocation];
                           } failureBlock:^(NSError *error) {
                               NSLog(@"Can not get asset - %@",[error localizedDescription]);
                           }];

但是,如果用户上传图片然后返回上传屏幕并上传其他图片,则在上传三到四次后,应用程序会在EXC_BAD_ACCESS运行assetForURL:resultBlock:failureBlock:方法时崩溃。

我想这是因为assetForURL:resultBlock:failureBlock:运行异步而ALAssetsLibrary由于某种原因被释放,但它不能像我构建应用程序那样同时运行。

如何防止它崩溃?

修改

虽然崩溃总是在这一点上(由于之前的解雇),但由于之前已解除分配的UITableView而发生错误,但此时引用了其委托/数据源。 修复补充说:

- (void) dealloc
{
    myTableView.dataSource = nil;
    myTableView.delegate = nil;
}

在具有TableView的UIViewController的末尾。

1 个答案:

答案 0 :(得分:1)

只需将您的对象更改为属性。

接口:

@property (nonatomic, strong) ALAssetsLibrary* assetslibrary;

比调用实现:

if (self.assetslibrary == nil) {    
    self.assetslibrary = [[ALAssetsLibrary alloc] init];
}
[self.assetslibrary assetForURL:urlPhoto
                           resultBlock:^(ALAsset *asset) {
                               CLLocation *location = [asset valueForProperty:ALAssetPropertyLocation];
                           } failureBlock:^(NSError *error) {
                               NSLog(@"Can not get asset - %@",[error localizedDescription]);
                           }];