2010-07-25 95 views
0

我有一个函数,在UpdateViewController中,由代理,MyDownloadController,将关闭模式视图(这是UpdateViewController)调用。iPhone:modalview不会关闭

-(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 

什么是诊断这个问题的最好方法是什么?

回答

0

苹果的文件说:

dismissModalViewControllerAnimated:

驳回,是由接收器提供的模态视图控制器。

意味着你调用了viewController上的dismissModalViewControllerAnimated:方法,该方法展示了你想要关闭的ModalViewController。在你的情况下,这是使用正确的代码。

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

    [self.parentViewController dismissModalViewControllerAnimated:YES]; 
} 

同样回答你关于代表和指针数量的其他问题。更好的设计通常意味着你没有大量的委托对象,但没有理由说这是错误的,它只是变得混乱恕我直言。指针和你所描述的那样很可能导致泄漏或崩溃,它不会关闭的原因是我上面指出的,你没有把方法调用到正确的接收器。

+0

如果您正在尝试抽象各个部分,除代表之外,更好的方法是什么? 并使用self.parentViewController不起作用。任何其他想法? – RyanJM 2010-07-26 21:00:03

+0

对不起,对于非常迟的回复,但希望这可以帮助到最后的人。无论如何,谢谢你的回答是正确的。有不同的方式来抽象这种特定的行为,但我会建议反对它。首选的方式是委派,因为有直接的参考。第二个优选方式是通过响应者链。视图的视图控制器是下一个响应者。参见[UIApp sendAction:@selector(myEvent :) to:nil from:self forEvent:[UIEvent new]];在链中侦听myEvent的视图控制器可以响应。请参阅文档:http://bit.ly/10bBa4W – gauravk92 2014-10-20 01:23:15

2

如果downloadController是你想解雇的视图,我相信你会很快发布它。

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

    self.downloadController.delegate = nil; 
    [downloadController release]; 
} 
+0

对不起,我应该命名控制器,以便更清楚发生的事情。我会更新这个问题来澄清这一点。 – RyanJM 2010-07-25 18:44:27