2013-03-13 2 views
2

Суть того, что я пытаюсь сделать, - установить значение метки в окне, которое я перехожу к тексту, введенному пользователем в предыдущем окне.Почему мое приложение разбивается, когда я пытаюсь установить значение этой переменной в prepareForSegue?

Пользователь переходит, нажав «Читать», который их перебирает.

Вот мой метод prepareForSegue:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    ReadingViewController *destination = segue.destinationViewController; 

    destination.textToRead = self.textInput.text; 
} 

textToRead только объект NSString, который содержит текст, который пользователь вводит. (Этот текст затем устанавливается как метка с помощью метода viewDidLoad.)

Окно, которое отделяется, устанавливается как другой контроллер представлений, как и ожидалось (ReadViewController), и я создал segue путем управления перетаскиванием из «Read «UIButton в следующее окно.

Я не могу понять, в чем проблема. Вот ошибка дает:

2013-03-13 19:00:08.119 Project Lego[1523:c07] -[UINavigationController setTextToRead:]: unrecognized selector sent to instance 0x894d230 
2013-03-13 19:00:08.122 Project Lego[1523:c07] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UINavigationController setTextToRead:]: unrecognized selector sent to instance 0x894d230' 
*** First throw call stack: 
(0x1c92012 0x10cfe7e 0x1d1d4bd 0x1c81bbc 0x1c8194e 0x2949 0x45bb87 0x45bc14 0x10e3705 0x172c0 0x17258 0xd8021 0xd857f 0xd76e8 0x46cef 0x46f02 0x24d4a 0x16698 0x1beddf9 0x1bedad0 0x1c07bf5 0x1c07962 0x1c38bb6 0x1c37f44 0x1c37e1b 0x1bec7e3 0x1bec668 0x13ffc 0x244d 0x2375 0x1) 
libc++abi.dylib: terminate called throwing an exception 
(lldb) 

ответ

4

Если вы хотите получить доступ к контроллеру вида, встроенный в navigationVC, сделать что-то вроде этого:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
    { 
     UINavigationController *nav = (UINavigationController*)segue.destinationViewController; 
     ReadingViewController *destination = [nav.viewControllers objectAtIndex:0]; 
     destination.textToRead = self.textInput.text; 
    } 
+0

Красивый ответ, работал именно так, как я хотел, спасибо. (Я мог бы добавить, однако, что 'UINavigationController' - это класс, который вы ищете.) –

+1

Ха-ха, да, у меня это получилось прямо без броска .. Исправить..плохо плохо, набрав манжету –

1

Ваш переход ссылается на UINavigationController, а не ваш класс ViewController. Проверьте свою раскадровку, чтобы убедиться, что segue подключает правильные контроллеры.

+0

Вы правы, что это было на самом деле. Только, я хочу, чтобы он был встроен в контроллер навигации, поэтому у него может быть панель навигации для ввода моей кнопки отмены (так что я могу отклонить модальный вид). Есть ли способ вставить его в контроллер навигации и все еще иметь эту работу? –

1

Кажется, что вы настраиваете textToRead на контроллере навигации. Я предполагаю, что вы хотите установить это в контроллере представления. В этом случае вы должны

if ([segue.destinationViewController 
       isKindOfClass:[UINavigationController class]]) 
    { 
     mvc = (ReadingViewController *) [segue.destinationViewController topViewController]; 
     mvc.textToRead = self.textInput.text; 

    } else { 

     ReadingViewController *destination = segue.destinationViewController; 
     destination.textToRead = self.textInput.text; 
    } 
Смежные вопросы