无法关闭模态视图控制器

时间:2011-11-26 20:43:45

标签: iphone objective-c ios ipad

我遇到问题让我的模态视图控制器正确显示然后解散。基本上我有一个模态显示的登录窗口,我想在从数据库加载我要显示的所有数据后将其关闭。如果我打电话

来自LoginViewController类的

[self dismissModalViewControllerAnimated:YES]它可以很好地工作但是如果我调用

成功导入数据后,我的datamanager类中的

[[mainController modalViewController] dismissModalViewControllerAnimated:YES]没有任何反应。这是非常令人困惑的,因为[mainController modalViewController]指向了locationManager类。

有没有人知道为什么这不起作用?如果重要的话,我正在为iOS 4编程。

谢谢!

3 个答案:

答案 0 :(得分:3)

解除模态视图控制器的正确方法是在呈现它的视图控制器上调用-dismissModalViewControllerAnimated:。因此它应该是[_splitViewController dismissModalViewControllerAnimated:YES];

从你的评论中,你需要在主线程上调用-dismissModalViewControllerAnimated:,你可以这样做:

dispatch_async(dispatch_get_main_queue(), ^{
    [_splitViewController dismissModalViewControllerAnimated:YES];
});

答案 1 :(得分:3)

好的,所以我想出来了。基本上发生的事情是[self dismissModalViewController]调用发生在另一个线程上,无论出于何种原因,该线程意味着该对象没有正确处理dismiss消息。我最终使用了一个通知,然后调用了dismissModalView控制器,如下所示:

- (void)dismissSelf
{
    [self dismissModalViewControllerAnimated:YES];    
}

- (void)receiveDismissNotification:(NSNotification *) note
{
    [self performSelectorOnMainThread:@selector(dismissSelf) withObject:nil waitUntilDone:NO];
}

哪个有效

答案 2 :(得分:1)

要关闭模型视图控制器,请使用以下代码

[self dismissModalViewControllerAnimated:YES];

此代码也适用于ios 5.

用于展示模型视图控制器

if (self.viewController!=nil)
{
       //sanity check for view controller
       [self.viewController SOMEVIEW animated:YES];
}