2013-07-19 2 views
0

У меня есть приложение iOS с помощью tabBarController. Каждый корневой вид табуляции является навигационным контроллером. В одной из вкладок я использую кнопку на панели навигации, чтобы подтолкнуть меня к UIViewController, который содержит UITextView.Содержимое в UITextView теряется при использовании кнопки «Назад» в моем навигационном контроллере

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

Чтобы было ясно, что я хотел бы сделать. Пользователь может ввести некоторый текст в UITextView и вернуться к первому виду, не теряя его. Когда они захотят вернуться во 2-й вид, текст должен быть в UITextView.

content handling of UITextView between two navigation view предложил использовать класс делегата string, чтобы сохранить текст. Меня это касается, потому что я не уверен, сохранит ли он возможное форматирование абзаца от пользователя.

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

Каков наилучший способ выполнить то, что я пытаюсь сделать? Я отчасти новичок в этом, поэтому Snippets действительно помогают!

UPDATE Более уместной информации

Текст в UITextView предназначается, чтобы в конечном счете быть размещены на сервере. Мне просто нужно придерживаться этого текста, пока они не опубликуют его. У приложения есть логин, поэтому всегда есть возможность, что они могут выйти и снова, или даже кто-то другой. Если я правильно поняла это, это приведет к созданию нового управляемого объекта управления, чтобы уничтожить все основные данные, которые я сохранил для отдельного пользователя, а также NSUserDefaults. Есть ли способ сохранить текст в процессе, описанном выше?

+0

Как только вы нажмете назад, контроллер вашего вида, содержащий UITextView, выскочил со стека и фактически освобожден. То, что вы испытываете, - это ожидаемое поведение. Теперь, если вы хотите сохранить этот NSString, вам придется как-то его сохранить. Я не уверен, как этот NSString используется, чтобы вы могли либо сохранить его в основных данных, либо просто установить его в NSUserDefaults. Опять же, это действительно зависит от того, как вы используете данные. Вы также можете сохранить его в некотором ресурсе singleton class. – rocky

+0

@rocky благодарю вас за то, что вы указали на ожидаемое поведение контроллера вида. Пожалуйста, ознакомьтесь с обновлением, которое я добавил к вопросу, и дайте мне свои мысли. – Ben

ответ

0

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

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

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

+0

Wain, вы верны, текст будет использоваться только в одном контроллере. Просто взглянув на материал NSCoding, это кажется очень простым в реализации. У меня есть один вопрос относительно этого. Нужно ли создавать собственный класс NSObject для реализации методов 'encodeWithEncoder:' и 'initWithEncoder:' или я могу просто добавить их в свой класс 'UIViewController'? – Ben

+2

Я верю, что Wain предлагает просто сохранить присланную строку (NSAttributedString), которая уже внедряет кодировку. –

+0

Спасибо, что указали, что вне @StevenMcGrath! Прочитав ваше заявление, я понял, что «соответствует NSCoding» означает именно то, что он говорит, а не использовать методы NSCoding. Я закончил тем, что просто сохранил строку в NSUserDefaults, когда представление исчезает и перезагружается в viewDidLoad. Довольно простое исправление, а не пуленепробиваемое, но пока будет служить цели. – Ben

Смежные вопросы