Как перейти к UIViewController в раскадровке и при этом сохранить иерархию навигации? - PullRequest
1 голос
/ 21 февраля 2012

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

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

Как правильно с этим справляться? Должен ли я просто пройти через раскадровку до точки, в которой пользователь остановился, представляя каждому UIViewController с анимацией, установленной на NO, до тех пор, пока я не доберусь до той, на которой был пользователь? (И если да, то как лучше всего хранить эту информацию? Существуют ли какие-либо методы / классы, которые могут помочь с этим, или я использую свой собственный способ хранения их через раскадровку?)

1 Ответ

0 голосов
/ 21 февраля 2012

Одна опция использует NSUserDefaults . Вы не можете точно сохранить точные экземпляры UIViewControllers на диске и извлечь их, как если бы они были в памяти. Что происходит, вы должны как-то, например, ключ / значение, идентифицируйте каждый из ваших viewControllers, которые вас интересуют, и хотите сохранить их состояние. Также вам нужно ввести каждый элемент, который вы хотите сохранить, а затем сохранить, используя NSUserDefaults.

Например, предположим, у вас есть такая иерархия:

HomeView> ListOfNotes> NoteAtIndexPath: x

И пользователь просматривает NoteAtIndexPath: x, а также давайте предположим, что размер шрифта является динамическим, поэтому пользователь может сделать его больше или меньше во время просмотра. Вы можете определить две клавиши: IndexOfLastNoteViewed и LasFontSizeViewed и сохранить их:

 [[NSUserDefaults standardUser] setInteger:5 forKey:IndexOfLastNoteViewed];
 [[NSUserDefaults standardUser] setFloat:17.0 forKey:LasFontSizeViewed];

Когда приложение снова запустится, вы можете проверить ключи и программно перейти к HomeView> ListOfNotes> NoteAtIndexPath: 5.

Вот несколько ссылок, которые могут вам помочь:

...