передача значения переменной между представлениями и классами - PullRequest
0 голосов
/ 12 ноября 2011

Я пытаюсь передать значения переменных между классами разных представлений.Я использую контроллер навигации, и передача видов от одного контроллера навигации к другому возможна посредством объявления свойства и синтеза.

Однако я не знаю, как я могу сделать это из одного представления в не СЛЕДУЮЩЕЕ, а другие представления встек.

Например,

FirstViewController -> SecondViewController -> ThirdViewController

Это последовательность видов в контроллере навигации.

Я хочу передать значение переменной в FirstViewController в ThirdViewController.

Как я могу это сделать?

Я попробовал в FirstViewController что-то подобное:

SecondViewController *second [SecondViewController alloc] init] autorelease];    
ThirdViewController *third = [ThirdViewController alloc] init] autorelease];  
third.passVariable = myVariable;

.....
[[self.navigationController pushViewController:second animated:YES];
....

Как я могу это сделать?Может ли кто-нибудь предоставить мне пример строки кода?

Заранее большое спасибо ..

Ответы [ 2 ]

2 голосов
/ 12 ноября 2011

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

Ваш подход правильный, но вы должны передать переменную второму контроллеру представления, икогда второй контроллер представления создает третий контроллер представления, он может передать его этому.

Отредактировано после комментария

Делегирование (где вы используете протокол) являетсяспособ получения информации обратно в контроллер.т.е. если вы хотите вернуть информацию обратно в первый контроллер представления из третьего контроллера представления.Я написал простой пример здесь .Но чтобы установить первый контроллер представления в качестве делегата третьего контроллера представления, вам все равно нужно передать ссылку на первый контроллер представления вверх по стеку так же, как я описал выше.

Есливы хотите узнать, как настроить одноэлементный источник данных, создать проект iOS с Core Data и посмотреть, как шаблон устанавливает контекст управляемого объекта.

0 голосов
/ 12 ноября 2011

UINavigationController имеет свойство под названием viewControllers, которое является NSArray всех контроллеров представления в контроллере навигации.Вы можете использовать это для доступа к другим контроллерам.

Так что это может быть то, что вам нужно.Предполагая, что вы в третьем View Controller, и вы хотите переменную в первом.(И у First есть метод для получения переменной.

id obj = [[[navigationconroller viewControllers] objectAtIndex:0] getMyVar];

Я не проверял это, поэтому он может не работать точно. Возможно, вам придется использовать [viewcontroller performSelector:@selector(getMyVar)];, где viewcontroller - это контроллер видавзято из вашего navigationcontroller.viewControllers.

Надеюсь, что имеет смысл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...