Метод делегата выдает ошибку времени выполнения «нераспознанный селектор» при переключении с одного UIViewController на основной View Controller - PullRequest
0 голосов
/ 09 июня 2010

Хорошо, я потратил на это как полдня, и это меня убивает.

Итак, у меня есть 3 контроллера представления, переходящих друг от друга, что-то вроде этого:

Я вызываю UploadDecisionViewController после уничтожения предыдущего View Controller:

[self dismissModalViewControllerAnimated:YES];
[self performSelector:@selector(showUDModalView) withObject:nil afterDelay:0.5];

В моем методе showUDModalView:

- (void)showUDModalView
{
    UploadDecisionViewController *udcontroller = [[UploadDecisionViewController alloc] initWithNibName:@"UploadDecisionViewController" bundle:nil];
    udcontroller.delegate = self;

    [self presentModalViewController:udcontroller animated:YES];
    [udcontroller release];

}

UploadDecisionViewController не показывает никаких проблем. UploadDecisionViewController имеет кнопку, при нажатии которой я хочу перейти к FileUploadViewController. Я установил UploadDecisionDelegate, добавил метод для обработки нажатия кнопки:

Внутри протокола UploadDecisionDelegate (UploadDecisionViewController.h):

@protocol UploadDecisionDelegate

//let UOnliveViewController know that a button was selected
- (void)UploadDecisionViewController:(UploadDecisionViewController *)controller madeChoice:(NSString *)whichDirection;
@end

Тогда внутри моего метода IBAction, когда кнопка нажата, у меня есть это:

- (IBAction)decisionSelected:(id)sender
{

    [delegate UploadDecisionViewController:self madeChoice:@"upload"];//crashing at this line

}

Когда я запускаю это, в этой строке выше выдается исключение времени выполнения:

2010-06-09 12:48:59.561 UOnlive[4735:207] *** -[UIView UploadDecisionViewController:madeChoice:]: unrecognized selector sent to instance 0x3b65420
2010-06-09 12:48:59.562 UOnlive[4735:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[UIView UploadDecisionViewController:madeChoice:]: unrecognized selector sent to instance 0x3b65420'
2010-06-09 12:48:59.563 UOnlive[4735:207] Stack: (
    33502299,
    2495698185,
    33884219,
    33453686,
    33306306,
    20618,
    2982917,
    3390286,
    3399023,
    3394235,
    3087839,
    2996168,
    3022945,
    40156505,
    33287040,
    33283144,
    40150549,
    40150746,
    3026863,
    11700,
    11554
)

Позвольте мне добавить реализованный метод делегата:

- (void)UploadDecisionViewController:(UploadDecisionViewController *)controller madeChoice:(NSString *)whichDirection
{
    NSLog(@"it got to here 245");
    [self dismissModalViewControllerAnimated:YES];
    if (yesOrNo) {
        //open up the FileUploadViewController and proceed to upload
        [self performSelector:@selector(showFUModalView) withObject:nil afterDelay:0.5];

    }
}

Может кто-нибудь сказать мне, что, черт возьми, происходит? Большое спасибо за помощь ...

Ответы [ 2 ]

0 голосов
/ 09 июня 2010

Ошибка говорит о том, что вы пытаетесь вызвать метод UploadDecisionViewController для UIView.

Моя ставка заключается в том, что вы задали какой-то вид делегату вместо контроллера представления.

Где находится метод showUDModalView?Может быть, вы установите делегата в некоторых дополнительных местах?

0 голосов
/ 09 июня 2010

Ваш код слишком длинный, и я не хочу проходить через это, но просто совет, вы можете c, если ваш объект может / не может выполнить селектор с таким утверждением:

if([myObj respondsToSelector:@selector(myFunc)])
{
 //do something
}
else{
//do something else
}
...