iPhone: модалвью не закрывается - PullRequest
0 голосов
/ 25 июля 2010

У меня есть функция в 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).

Что-то не так с таким количеством делегатов?И может ли ошибка указателя или что-то с ними повлиять на возможность закрытия modalview?Если да, то как / почему?

У меня есть такая структура для делегаций:

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

Как лучше всего диагностировать эту проблему?

Ответы [ 2 ]

2 голосов
/ 25 июля 2010

Если downloadController - это представление, которое вы хотите отклонить, я полагаю, вы выпускаете его слишком рано.

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

    self.downloadController.delegate = nil;
    [downloadController release];
} 
0 голосов
/ 25 июля 2010

Документация Apple гласит:

dismissModalViewControllerAnimated:

Отклоняет контроллер модального представления, представленный приемником.

Значит, вы вызываете метод dismissModalViewControllerAnimated: метод для viewController, который представил ModalViewController, который вы хотите отклонить.в вашем случае это правильный код для использования.

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

    [self.parentViewController dismissModalViewControllerAnimated:YES];
}

Также ответьте на ваши другие вопросы о количестве делегатов и указателей.Лучший дизайн обычно означает, что у вас нет огромных строк объектов делегатов, но нет особых причин говорить, что это неправильно, это просто беспорядочно ИМХО.Указатели и тому подобное, как вы описали, скорее всего, вызовут утечки или сбои, причина, по которой он не закроется, это то, что я указал выше, вы не вызывали метод для правильного получателя.

...