gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 02:31:22 24 4
gpt4 key购买 nike

当用户从 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]);
}];

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

我猜这是因为 assetForURL:resultBlock:failureBlock: 运行异步并且 ALAssetsLibrary 由于某种原因被释放,尽管它​​不能像我那样同时运行构建了应用程序。

如何防止它崩溃?

编辑

尽管崩溃始终发生在此时(由于较早的关闭),但发生错误的原因是之前已释放的 UITableView,但此时引用了其委托(delegate)/数据源。修复添加:

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

关于iOS - 多次调用 ALAssetsLibrary 时访问错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26828809/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com