从异步块向主线程发送参数时遇到问题
Posted
技术标签:
【中文标题】从异步块向主线程发送参数时遇到问题【英文标题】:Trouble Sending Parameter to Main Thread From Async Block 【发布时间】:2013-01-03 05:56:56 【问题描述】:我有以下方法在拍摄照片后从UIImagePicker
检索ALAsset
。然后它尝试通过主线程将此ALAsset
发送到我的另一个方法:
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
NSURL *imageURL = [[info valueForKey:UIImagePickerControllerReferenceURL] retain];
__block ALAsset *result;
[self.assetsLibrary assetForURL:imageURL resultBlock:^(ALAsset *asset)
result = [asset retain];
dispatch_async(dispatch_get_main_queue(), ^
[self loadPhotoImageViewWithAsset:result];
[self dismissModalViewControllerAnimated:YES];
[imageURL release];
[result release];
);
failureBlock:^(NSError *error)
];
当我进入dispatch_async(dispatch_get_main_queue(), ^ block
时,result
显示为nil
。有人知道我在这里做错了什么吗?
【问题讨论】:
【参考方案1】:请参考UIImagePickerController to use for a UIImageView,结果显示为 nil。
这样使用:
[self.assetsLibrary assetForURL:imageURL resultBlock:^(ALAsset *asset)
result = [asset retain];
[self loadPhotoImageViewWithAsset:result];
[self dismissModalViewControllerAnimated:YES];
[imageURL release];
[result release];
failureBlock:^(NSError *error)
];
更改您的loadPhotoImageViewWithAsset
方法
-(void)loadPhotoImageViewWithAsset:(ALAsset *)asset
//dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul);
//dispatch_async(queue, ^
dispatch_async(dispatch_get_main_queue(), ^
//here code for loading image
);
// );
【讨论】:
感谢这在我使用 UIImagePicker 从照片库中选择照片时有效。当我尝试将它与相机一起使用时,它没有,所以我想问题更多的是相机。 UIImagePickerControllerReferenceURL 有一个用于挑选照片和拍摄照片的 url。所以代码保持不变 问题是使用 imagepicker 拍摄的照片由于某种原因没有进入我的照片库。将您的标记为正确,因为您回答了我的问题,谢谢。以上是关于从异步块向主线程发送参数时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章