当用户从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
的末尾。
答案 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]);
}];