Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 双模态控制器_Iphone_Objective C_Email_Modalviewcontroller - Fatal编程技术网

Iphone 双模态控制器

Iphone 双模态控制器,iphone,objective-c,email,modalviewcontroller,Iphone,Objective C,Email,Modalviewcontroller,我有一个导航控制器,从那里我启动了一个ModalViewController。 在这个ModalViewController中,我将显示MailComposer,它本身就是另一个ModalViewController [self.delegate finishAddList:checkmark andListName:listName.text]; 现在,如果用户点击发送按钮,MailComposer视图和其他ModalViewController都应该被关闭。为此,我在MailCompose

我有一个导航控制器,从那里我启动了一个ModalViewController。 在这个ModalViewController中,我将显示MailComposer,它本身就是另一个ModalViewController

[self.delegate finishAddList:checkmark andListName:listName.text];
现在,如果用户点击发送按钮,MailComposer视图和其他ModalViewController都应该被关闭。为此,我在MailComposer控制器中调用一个委托方法

[self.delegate finishAddList:checkmark andListName:listName.text];
现在只有MailComposer视图将被取消,但其他ModalViewController和我没有收到以下错误消息

attempt to dismiss modal view controller whose view does not currently appear. self = <UINavigationController: 0x724d500> modalViewController = <UINavigationController: 0x72701f0>
在AddListViewController中调用MailView

MFMailComposeViewController *mailComposer = [[MFMailComposeViewController alloc] init];
    mailComposer.mailComposeDelegate = self;

    NSString *subject = [NSString stringWithFormat:@"Group invite for groupname: %@", @"mhm"];
    [mailComposer setSubject:subject];

    // Fill out the email body text
    NSString *emailBody = @"This is an group invite bla bla";
    [mailComposer setMessageBody:emailBody isHTML:NO];

    [self presentModalViewController:mailComposer animated:YES];
    [mailComposer release]; 
在MailComposer控制器方法中

[self.navigationController dismissModalViewControllerAnimated:YES];
[self.delegate finishAddList:checkmark andListName:listName.text];
在finsihAddList委托中

[self dismissModalViewControllerAnimated:YES];

您必须延迟调用第二次解雇,因为调用时第一次解雇尚未完成

[self performSelector: @selector(finish:) withObject: obj afterDelay: 0.0f];

0.0f的延迟是故意的,这意味着它将在下一个事件循环中完成。

我也遇到过类似的问题。我有一堆模型显示的视图控制器。当我试图从可见的一个开始消除它们,然后向下移动堆栈时,我会失败,并出现相同的错误。解决方案是关闭堆栈底部的视图控制器。它会忽略上面的一切

在您的情况下,我的解决方案相当于更改MailComposer控制器方法,使其仅包含一行(不会忽略最顶层的模态vie控制器)


我知道您已经解决了问题,但认为这可能对其他人有所帮助。

尝试过,但仍然出现相同的错误[self.delegate performSelector:@selector(finishadlist:)with object:listName.text afterDelay:0.0f];您是否尝试过将动画移到第二个位置?你有没有尝试过使用更大的延迟?我认为简单地使用延迟是危险的,因为你依赖于一个参数,这个参数是根据你对特定硬件,特别是对特定CPU所做的测试而设置的。在较慢的硬件上,或者如果CPU太忙,这个延迟可能仍然不够。@HZC这不是关于硬件的知识,而是关于事件循环的知识。延迟即使设置为0.0f也有效,即使硬件速度快得离谱,因为这将在事件循环的下一次运行时有效完成。这是一个更好的解决方案,因为它不涉及计时。