iOS-多次调用库时访问错误

iOS-多次调用库时访问错误,ios,iphone,uiimagepickercontroller,exc-bad-access,alassetslibrary,Ios,Iphone,Uiimagepickercontroller,Exc Bad Access,Alassetslibrary,当用户从iPhone gallery上传图片时,我使用AlassetLibrary提取位置: ALAssetsLibrary* assetslibrary = [[ALAssetsLibrary alloc] init]; [assetslibrary assetForURL:urlPhoto resultBlock:^(ALAsset *asset) {

当用户从iPhone gallery上传图片时,我使用
AlassetLibrary
提取位置:

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]);
                           }];
但是,如果用户上载一张图片,然后返回上载屏幕并上载另一张,则在三次或四次上载后,当运行
assetForURL:resultBlock:failureBlock:
方法时,应用程序在
EXC\u BAD\u ACCESS
上崩溃

我猜这是因为
assetForURL:resultBlock:failureBlock:
运行异步,并且
ALAssetsLibrary
出于某种原因被释放,尽管它不能像我构建应用程序的方式同时运行

如何防止它崩溃

编辑

尽管崩溃总是在此时发生(由于之前的Dislose),但发生错误的原因是先前解除分配的
UITableView
,但此时引用了它的委托/数据源。 修复程序添加了:

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

在具有TableView的
UIViewController
的末尾。

只需将对象更改为属性

接口:

@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]);
                           }];

你在哪一行得到错误?在assetLibrary上=?或者回调?你能试着把回调放在主队列上吗?我添加了日志来查看它在哪里崩溃,因为它只在主队列中被捕获。它似乎开始运行assetForURL:resultBlock:failureBlock:方法,但从未访问回调方法。尝试在主线程上执行回调,更改要在主线程上执行的结果:
[AssetLibrary assetForURL:urlPhoto resultBlock:^(ALAsset*asset){[self-performSelectorOnMainThread:@selector(checkLocation:)with Object:asset waitUntilDone:YES];}failureBlock:^(NSError*error){NSLog(@“无法获取资产-%@,[error localizedDescription]);}]
仍然崩溃…不幸的是,它仍然不起作用。根据NSLog的“我知道”命令,AlassetLibrary的分配没有失败。它发生在运行方法assetForURL时,然后进入回调。