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:模态视图未关闭的主要内容,如果未能解决你的问题,请参考以下文章