2012-06-18 3 views
1

В настоящее время я делаю приложение калькулятора с функциональностью графика. Итак, у меня есть эта кнопка в моем калькуляторе и подключена к моему калькулятору Calculator2ViewController. Кроме того, я подключил эту кнопку к другому UIViewController с именем GraphViewController и назвал идентификатор segue равным showGraph. Ниже приведен код моего сеанса.непризнанный селектор, отправленный в экземпляр ... снова

- (GraphViewController *)graphViewController { 
    return [self.splitViewController.viewControllers lastObject]; 
} 

- (IBAction)graphPressed { 

    if ([self graphViewController]) { 
    [[self graphViewController] setProgram:self.brain.program]; 
    } 

    else { 
    [self performSegueWithIdentifier:@"showGraph" sender:self]; 
    } 
} 

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    [segue.destinationViewController setProgram:self.brain.program]; 
} 

Там нет ошибок и предупреждений. Но когда я пытаюсь запустить приложение и нажимаю кнопку Graph, приложение вылетает и получает это на моей консоли.

2012-06-18 11:08:17.272 Calculator2[1135:f803] -[Calculator2ViewController graphPressed:]: unrecognized selector sent to instance 0x6c38850 
2012-06-18 11:08:17.273 Calculator2[1135:f803] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[Calculator2ViewController graphPressed:]: unrecognized selector sent to instance 0x6c38850' 

Просьба разъяснить мне, почему это происходит и как я могу это сделать лучше. Благодаря!

EDIT: Изменено - (IBAction)graphPressed к - (IBAction)graphPressed:(id)sender. Сегу работает сейчас. Тем не менее, у меня есть это уведомление на моей консоли (что-то страшно)

2012-06-18 11:30:02.955 Calculator2[1260:f803] nested push animation can result in corrupted navigation bar 
2012-06-18 11:30:03.308 Calculator2[1260:f803] Finishing up a navigation transition in an unexpected state. Navigation Bar subview tree might get corrupted. 
2012-06-18 11:30:03.309 Calculator2[1260:f803] Unbalanced calls to begin/end appearance transitions for <GraphViewController: 0x6e458d0>. 
+0

В каком классе вы определили graphPressed ??? –

+0

Я только что подключил свою кнопку Graph к Calculator2ViewController.m и назвал ее «graphPressed» – Grauzten

ответ

5

graphPressed и graphPressed: различные методы. У одного есть параметр аргумента, другой - нет. Вы реализовали его как:

-(IBAction)graphPressed 

Но вы можете объявляли функцию в заголовке как:

-(IBAction)graphPressed:(id)sender 

Какой он (по праву) видит как две совершенно разные функции. Теперь вы можете объявить и реализовать без каких-либо параметров (-(IBAction)graphPressed) или с параметрами (-(IBAction)graphPressed:(id)sender), но важно то, что это согласуется как в декларации и реализации. Декларация и реализация должны быть одинаковыми.

Просто совет, чтобы всегда объявлять IBActions как -(IBAction)myButtonWasPressed:(id)sender, потому что это позволяет вам узнать, какая кнопка была нажата (через параметр sender), и это позволяет вам иметь несколько кнопок, которые запускают одно и то же событие быть в состоянии сказать, что было нажато.

+0

Спасибо за подробное объяснение, действительно оценили это. Я сделал это предложение, и сейчас работает segue. Тем не менее, я получаю уведомление на моей консоли (см. Отредактированный пост). Пожалуйста, помогите мне с этим. Я имею в виду, почему это дает мне это уведомление.Также в другой заметке, когда я набрал следующий VC после нажатия кнопки, когда я хочу вернуться к первоначальному VC, требуется 2 нажатия кнопки задней панели, чтобы на самом деле это сделать, а не просто 1. – Grauzten

+0

. Вы должны опубликовать их как отдельные вопросы. – sosborn

+0

Скорее всего, у вас есть код push/segue в коде (который я вижу, что вы делаете) *, а также в раскадровке * (что я не вижу) - то есть вы можете дважды нажать на него случайно , – CrimsonDiego

3

Посмотрите, как селектор в сообщении об ошибке содержит двоеточие? Похоже, тот же метод, но это не совсем то же самое ... graphPressed должен быть объявлен с парам

- (IBAction)graphPressed:(id)sender 
+0

Спасибо! Я сделал это, и теперь segue работает. Однако я получаю это уведомление с моей консоли, и это отчасти страшно (см. EDIT в сообщении). – Grauzten

+0

. Мой мой комментарий не выглядит хорошим. Я отредактирую свой пост и увижу там уведомление. – Grauzten

+0

Пока не вижу изменения. Может быть, что-то происходит в setProgram, возможно, в анимации? Может быть, опубликовать этот код? Я ухожу на ночь, но завтра проверю. – danh

Смежные вопросы