我在opencv委托方法processImage
中调用setImage函数时遇到问题
当我在setImage
中拨打viewDidLoad
时,我可以看到该图片,但是当我在processImage
中执行相同操作时,它无效。
这里有什么问题?
- (void)viewDidLoad
{
[super viewDidLoad];
// This works !
[processImageView setImage:[UIImage imageNamed:@"resistor3.jpg"]];
}
- (void)processImage:(cv::Mat&)img {
// This does not work anymore !
[processImageView setImage:[UIImage imageNamed:@"resistor3.jpg"]];
}
答案 0 :(得分:7)
当您修改UI时,您必须从主线程执行此操作,可能是委托方法(如果正在调用)在另一个线程上调用。试试这个。
- (void)processImage:(cv::Mat&)img {
dispatch_sync(dispatch_get_main_queue(), ^{
[processImageView setImage:[UIImage imageNamed:@"resistor3.jpg"]];
// I also think you should use the dot syntax, but that's purely a style thing
// processImageView.image = [UIImage imageNamed:@"resistor3.jpg"];
});
}
编辑:添加有关使用点语法的建议