我有一种用于在用户点击“保存”时保存图像的方法。 我使用performSelectorInBackground来保存图像,弹出viewcontroller并显示前一个viewcontroller。
我希望表格(在previousUIViewController上)在完成图像处理时重新加载它的数据。
我该怎么做?
这样调用save方法:
[self performSelectorInBackground:@selector(saveImage) withObject:nil];
[self.navigationController popViewControllerAnimated:YES];
答案 0 :(得分:9)
在saveImage
方法中,在完成保存图像之后和从方法返回之前发布通知。像这样:
// post notification
[[NSNotificationCenter defaultCenter] postNotificationName:@"ImageSaved" object:nil];
在处理表的控制器中,实现
- (void) imageSaved:(NSNotification *)notification{
[self.tableView reloadData];
}
并在其viewDidLoad
方法中添加以下代码以注册通知:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(imageSaved:)
name:@"ImageSaved" object:nil];
最后,在dealloc
方法中添加
[[NSNotificationCenter defaultCenter] removeObserver:self];
答案 1 :(得分:2)
我认为要走的路是在saveImage例程结束时调用方法。也许像是
[self performSelectorInBackground:@selector(saveImage) withObject:previousView];
如果您想保持saveImage不可知,请使用您之前的View可以使用的回调创建一个协议。
@protocol processingFinishedDelegate
-(void)processingFinished;
@end
所以在saveImage结束时你会有:
[(id<processingFinishedDelegate>)object processingFinished];
当然你的previousView类接口应该处理委托。
答案 2 :(得分:0)
我在使用此方法更新UITextView时遇到“unforgiven”建议的问题。我尝试了几种不同的方法,但都失败了......我也尝试了通知+观察者,但没有成功......为什么会这样?它在UILabel上运行正常,但没有UITextView,并显示以下消息:
尝试从主线程或Web线程以外的线程获取Web锁定。这可能是从辅助线程调用UIKit的结果。现在崩溃......