Развивая ответ dbarker, это похоже на то, что вам действительно нужно будет, чтобы сохранить значение currentString
в вашем модель данных. Правильное место для этого - в самом viewController.
Если ваша модель данных - это только одна строка, вы можете создать свойство в делетете приложения, чтобы ее удержать. Затем viewController записывает свойство делегирования приложения всякий раз, когда значение currentString
изменяется в представлении и/или его значение при закрытии представления.
Таким образом, данные (это вся точка приложения в любом случае) всегда находятся на месте, когда приложение закрывается независимо от того, сколько просмотров вы открываете.
Это правильная роль контроллеров для перемещения информации с интерфейса на модель данных. Строго говоря, viewController не должен хранить какие-либо данные вообще за пределами того, что необходимо самому интерфейсу. Это должно быть свойство модели данных, которую установили viewControllers, отправив сообщение объекту модели данных со значениями, взятыми из интерфейса.
В этом случае у вас не будет объекта currentString
на ваших контроллерах. Вместо этого они будут иметь свойство, которое является только ссылкой на свойство модели данных currentString
. Контроллеры представлений будут постоянно обновлять это свойство, но сами ничего не будут хранить.
Преимущество этой конструкции очевидно. Если вам нужно значение в любом месте вашего приложения, у вас есть одно место и один звонок, чтобы получить его. Ни одна часть приложения не должна даже знать о существовании любой другой части приложения, сохраняемой для модели данных.
Спасибо, что работает отлично, но значение currentString меняется каждую секунду. Это нормально или не так ли удобно устанавливать currentString каждую секунду в AppDelegate? – x2on
это, вероятно, не идеально - не потому, что это UIApplicationDelegate, а потому, что отправка трех сообщений каждую секунду дорого (sharedApplication, delegate, setCurrentString). Если TestViewController может делать то, что ему нужно делать с текущей строкой, то вы можете зарегистрировать его для UIApplicationWillTerminateNotification. – dstnbrkr
Хорошо, я переписал мой код, поэтому я могу зарегистрировать UIApplicationWillTerminateNotification и сделать там действия. Спасибо за этот намек! – x2on