iPhone:模态视图未关闭

Posted

技术标签:

【中文标题】iPhone:模态视图未关闭【英文标题】:iPhone: modalview not closing 【发布时间】:2010-07-25 01:12:30 【问题描述】:

我在 UpdateViewController 中有一个由委托 MyDownloadController 调用的函数,该函数将关闭模式视图(即 UpdateViewController)。

-(void)errorDownloading 
    self.downloadController.delegate = nil;
    [downloadController release];

    [self dismissModalViewControllerAnimated:YES];
 

我已经尝试过使用和不使用委托指针,但它仍然没有关闭视图。

委托在 MyDownloadController 中调用这样的方法:

-(void)connectionError 
    if([delegate respondsToSelector:@selector(errorDownloading)])
        [delegate errorDownloading];
    

这个函数被另一个委托(MyConnectionController)调用。

有这么多代表有什么问题吗?指针错误或与它们有关的东西会影响模态视图能够关闭吗?如果是这样,如何/为什么?

我有这样的代表团结构:

UpdateViewController (the actual modal view I am trying to close)
|- MyDownloadController (the controller that abstracts the process being done)
    |- MyConnectionController (a helper class I wrote to interact with NSURLConnection)
        |- NSURLConnection

诊断此问题的最佳方法是什么?

【问题讨论】:

【参考方案1】:

如果 downloadController 是你想要关闭的视图,我相信你发布的太早了。

-(void)errorDownloading 
    [self dismissModalViewControllerAnimated:YES];

    self.downloadController.delegate = nil;
    [downloadController release];
 

【讨论】:

抱歉,我应该为控制器命名,以便更清楚地了解发生了什么。我将更新问题以澄清这一点。【参考方案2】:

Apple 文档说:

dismissModalViewControllerAnimated:

关闭接收者呈现的模态视图控制器。

意思是你在 viewController 上调用了dismissModalViewControllerAnimated: 方法来呈现你想要关闭的 ModalViewController。在您的情况下,这是要使用的正确代码。

-(void)errorDownloading 
    self.downloadController.delegate = nil;
    [downloadController release];

    [self.parentViewController dismissModalViewControllerAnimated:YES];

还回答您关于代表人数和指针的其他问题。更好的设计通常意味着您没有大量的委托对象字符串,但没有理由说那是错误的,恕我直言,它只会变得混乱。您描述的指针和诸如此类的东西很可能会导致泄漏或崩溃,它不会关闭的原因是我在上面指定的,您没有将方法调用到正确的接收器。

【讨论】:

如果您尝试抽象各个部分,除了委托之外,还有什么更好的方法呢?并且使用 self.parentViewController 不起作用。还有其他想法吗? 很抱歉回复得太晚了,但希望这最终能对某人有所帮助。无论如何,感谢您将我的答案标记为正确。有不同的方法可以抽象出这种特定的行为,但我建议不要这样做。首选方式是委托,因为有直接引用。第二种首选方式是通过响应者链。视图的视图控制器是它的下一个响应者。参见 [UIApp sendAction:@selector(myEvent:) to:nil from:self forEvent:[UIEvent new]];链中监听 myEvent: 的视图控制器可以响应。请参阅文档:bit.ly/10bBa4W

以上是关于iPhone:模态视图未关闭的主要内容,如果未能解决你的问题,请参考以下文章

iPhone - 平滑显示 2 个连续的模态视图控制器

iPhone - 用另一个模态视图覆盖模态视图

iPhone - 在另一个模态视图中嵌套当前模态视图

显示模态视图时使 iPhone 状态栏消失?

iPhone:模态视图控制器的代表

呈现模态视图控制器时 iPhone 崩溃