Обмен данными через приложение Какао - PullRequest
1 голос
/ 19 июня 2011

Я искал, как правильно сделать это, но я не верю, что нашел свой ответ.Это моя установка:

NSWindowController загружается в 2 разных NSViewController (только один отображается одновременно).Когда я помещаю файл в загруженное представление NSViewController, я хочу сохранить путь к этому файлу.Я могу получить все это, но то, что я хочу сделать сейчас, - это когда я переключаюсь на другой NSViewController, я хочу передать этот путь к файлу к новому NSViewController.

Единственное решение, которое у меня естьпридумать, это опубликовать уведомление от моего NSViewController к NSWindowController и затем инициализировать 2-й NSViewController с этими данными, но это кажется довольно запутанным.Есть ли способ, которым я могу просто сохранить данные где-нибудь как глобальную сущность, а затем получить к ним доступ позже из моего второго NSViewController?

ПРИМЕЧАНИЕ.

Любое понимание будет оценено.

ОБНОВЛЕНИЕ: Я просто собираюсь изменить приложение, чтобы оба контроллера представления всегда находились в памяти.Таким образом, я могу поступить так, как предлагали другие, и использовать КВО или другие методы.

Ответы [ 3 ]

3 голосов
/ 19 июня 2011

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

При создании контроллеров представления вы можете установить свойство presentObject и сохранить имя файла.как одно из его свойств.Если ваш объект модели совместим с KVO, вы можете даже заставить каждый контроллер представления наблюдать свойство имени файла объекта модели и реагировать на изменения, когда они происходят.

1 голос
/ 19 июня 2011

Вы можете сохранить его где-нибудь в глобальной переменной / синглтоне, но это тоже не правильное решение.

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

Другой вариант - заставить контроллер второго представления прослушивать уведомление вместо контроллера окна. Если второй контроллер представления не существует (или может не существовать), то ваше текущее решение, позволяющее оконному контроллеру обрабатывать уведомление, вполне разумно.

0 голосов
/ 19 июня 2011

Как вы точно делаете обмен? Скажем, у вас был Навигационный контроллер, который контролирует, какое представление перемещается наверх. Почему у вас нет члена второго контроллера представления, который содержит путь к файлу?

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

SecondViewController *childController = [[SecondViewController alloc] initWithStyle:UITableViewStyleGrouped];
childController.title = @"Second View";
childController.filePath = myFilePath; //this is where you set the member
[self.navigationController pushViewController:childController 
                                     animated:YES];
[childController release];
...