我是iOS开发的新手,所以我觉得我在这里缺少一些基础知识。
我有视图控制器(VC),它显示来自服务器的一些信息。我的VC有两个通知中心观察员 - 一个用于服务器成功响应,一个用于错误。
我添加了像这样的观察者
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(getPlaceInfoFailed:)
name:kGetPlaceInfoRequestDidFailBlockNotification
object:nil];
如果出现错误,我想显示警报并导航到以前的视图控制器。我们将它们命名为视图控制器A
和B
。
我正在使用故事板。
我的问题是,当我回到A
UI完全搞砸了 - 导航栏有随机的东西,我的表视图有垃圾等等。最终应用程序崩溃。
以下是我尝试解雇我的VC B
- (void)getPlaceInfoFailed:(NSNotification *)notification {
dispatch_async(dispatch_get_main_queue(), ^{
//[self.navigationController popViewControllerAnimated:YES];
//[self dismissViewControllerAnimated: YES completion: nil];
//[self.presentingViewController dismissViewControllerAnimated: YES completion: nil];
//[self.presentedViewController dismissViewControllerAnimated: YES completion: nil];
//[self performSegueWithIdentifier:@"exitSegue" sender:self];
});
}
版本[self performSegueWithIdentifier:@"exitSegue" sender:self];
在我调用它时起作用,例如,在按钮操作处理程序中。
但不是观察者:(你可以看到我试图在UI线程中调用performSegue
- 没有区别。
我做错了什么?
谢谢!!!
答案 0 :(得分:0)
我建议的是,当通知触发并处理父控制器/呈现控制器 - VC A的viewWillAppear中的UI事故时,忽略VC。
如果我没错,这段代码应该在B中
- (void)getPlaceInfoFailed:(NSNotification *)notification {
[self dismissViewControllerAnimated: YES]; or try
[self dismissModalViewControllerAnimated:YES]; //dep'd in ios 6.
}
答案 1 :(得分:0)
看起来我的问题是我在performSegueWithIdentifier
之前调用了viewDidAppear
,这就是为什么它不起作用。
我如何处理两个异步事件 - 视图创建和请求服务器我还不知道。