0

我在 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

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

4

2 回答 2

2

如果 downloadController 是您想要关闭的视图,我相信您发布它的时间过早。

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

    self.downloadController.delegate = nil;
    [downloadController release];
} 
于 2010-07-25T01:32:04.043 回答
0

苹果文档说:

解除模式视图控制器动画:

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

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

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

    [self.parentViewController dismissModalViewControllerAnimated:YES];
}

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

于 2010-07-25T19:05:40.530 回答