2013-07-25 2 views
0

В настоящее время у меня есть 2 отдельных вида с отдельными контроллерами представлений в редакторе IB. В основном я хочу установить значение переменной (в моем случае это float, представляющий то, что я буду устанавливать как таймер), который основан на кнопке, которая нажата в первом контроллере представления, затем передайте эту переменную второму просмотрите контроллер. Проблема, которую я придумываю, состоит в том, что, поскольку набор переменных основан на UISegmentedControl, который нажат в первом представлении, это не так, как будто я могу создать экземпляр первого класса во втором классе, потому что это не спасло бы какую кнопку был нажат. Правильно? Итак, я попытался установить свою переменную в первом классе как статическую переменную, а затем сделать мой второй класс подклассом первого класса и получить доступ к переменной таким образом. К сожалению, я задал переменную в первом классе, но когда я обращаюсь к ней со второго (дочернего) класса, она по умолчанию возвращает значение 0. Это неверно. Похоже, что инкапсуляция данных вызывает это?Установите переменную в один контроллер View и получите доступ к нему в другом контроллере просмотра на основе нажатой кнопки

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

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

+0

Пожалуйста, сделайте поиск, прежде чем задавать вопрос - некоторые версии этого вопроса задаются не реже одного раза в день на этом форуме. Попробуйте выполнить поиск «Установите переменную в один контроллер просмотра и получите доступ к ней в другом контроллере просмотра», и вы получите много результатов. – rdelmar

+0

Да, спасибо, я исследовал его и пробовал, и он не работал так. Мои вопросы спрашивают, почему это не работает, как указано в других вопросах, и если есть лучший способ сделать это, чем то, что я сейчас пытаюсь сделать. – kyleC

+0

Ваша проблема в том, что вам нужно получить ссылку на другой контроллер, а не, как вы указали, создать новый экземпляр. Как вы получаете эту ссылку, зависит от того, как связаны два контроллера. Создает ли один другой (а затем нажимает или присутствует в коде) или переходит к другому? Что касается вашего вопроса о доступе к переменной из дочернего класса, у вас есть основное недоразумение - у ребенка будет такая же переменная, но это будет другой экземпляр, поэтому он будет иметь свое собственное значение, которое будет равно 0 для int или nil для объекта, пока вы его не установите. – rdelmar

ответ

0

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

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

Надеюсь, это имеет смысл?

+0

Да, спасибо! Оказывается, большая часть моей проблемы заключалась в том, что вы не устанавливали значение при инициализации статического значения, но спасибо за совет. Я предполагаю, что ваш метод обычно рассматривается как «лучший стиль программирования», чем статические переменные, которые я пытаюсь использовать, когда они не нужны. – kyleC

+0

Это правильно. Лучше всего подумать о том, «где эти данные принадлежат», чтобы прийти к решению архитектуры. Особенно, когда вы видите, что две или более частей вашего кода должны работать вместе. Рад, что смог помочь. – stevekohls