如何解除视图控制器或从NotificationCenter观察器中解除它?

时间:2013-09-02 07:42:39

标签: ios ios6 uiviewcontroller storyboard

我是iOS开发的新手,所以我觉得我在这里缺少一些基础知识。

我有视图控制器(VC),它显示来自服务器的一些信息。我的VC有两个通知中心观察员 - 一个用于服务器成功响应,一个用于错误。

我添加了像这样的观察者

[[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(getPlaceInfoFailed:)
                                                 name:kGetPlaceInfoRequestDidFailBlockNotification
                                               object:nil];

如果出现错误,我想显示警报并导航到以前的视图控制器。我们将它们命名为视图控制器AB

我正在使用故事板。

我的问题是,当我回到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 - 没有区别。

我做错了什么?

谢谢!!!

2 个答案:

答案 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,这就是为什么它不起作用。

我如何处理两个异步事件 - 视图创建和请求服务器我还不知道。