Могу ли я сохранить состояние моего приложения в ближайшее время в iPhone OS? - PullRequest
3 голосов
/ 21 апреля 2010

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

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

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

Ответы [ 4 ]

5 голосов
/ 21 апреля 2010

Как уже отмечали другие, это не относится к OS4, и это хорошая практика для реализации этого во всех приложениях.

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

NSUserDefaults *userPreferences = [NSUserDefaults standardUserDefaults];
[userPreferences setObject:currentPageNumber forKey:@"pageNumber"];

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

[[NSUserDefaults standardUserDefaults] stringForKey:@"pageNumber"];

Вы можете предпочесть только сохранение ссылкикогда приложение закрывается, но лучше сохранить его раньше (в случае неожиданного закрытия приложения)


Кроме того, вы упоминаете, что пользователи переходят через ряд «методов детализации».Возможно, вы захотите сохранить в NSMutableArray запись о том, где именно пользователь находится в приложении, и сохранить ее в NSUserDefaults.Когда ваше приложение запускается, вы обрабатываете информацию в этом массиве, чтобы вернуть пользователя туда, где он остановился.

5 голосов
/ 21 апреля 2010

Это всегда было возможно в iPhone OS. Большинство людей используют NSUserDefaults для хранения состояния своего приложения. Затем в методе делегата приложения -applicationDidFinishLaunching, или где бы вы ни настраивали свои представления и инициализировали состояние приложения, просто восстановите состояние, которое вы сохранили, используя NSUserDefaults.

3 голосов
/ 20 апреля 2012

если вы используете навигационный контроллер, вы можете использовать следующую строку кода для сохранения состояния вашего приложения:

NSMutableArray *listOfClasses = [[NSMutableArray alloc] init];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults removeObjectForKey:@"ViewControllers"];
NSArray *controllers = [_navController viewControllers];

for(UIViewController *VC in controllers)
    [listOfClasses addObject:[NSString stringWithFormat:@"%@",[VC class]]];

[defaults setObject:listOfClasses
             forKey:@"ViewControllers"];
[defaults synchronize];

на момент прекращения подачи заявки в фоновом режиме и вы можете использовать следующую строку кода для восстановления вашего приложения:

 NSArray *classes = [[NSUserDefaults standardUserDefaults] objectForKey:@"ViewControllers"];
if(classes != nil) {
    for(NSString *class in classes) {
        if([class isEqualToString:@"FirstViewController"]) {
            FirstViewController *viewController  = [[FirstViewController alloc] init];
            [controllers addObject:viewController];
            [viewController release];
        } else if([class isEqualToString:@"SecondViewController"]) {
            SecondViewController *viewController  = [[SecondViewController alloc] init];
            [controllers addObject:viewController];
            [viewController release];
        } else if([class isEqualToString:@"ThirdViewController"]) {
            ThirdViewController *viewController  = [[ThirdViewController alloc] init];
            [controllers addObject:viewController];
            [viewController release];
        } else {

        }
    }
 }

во время приложения закончил загрузку

3 голосов
/ 21 апреля 2010

То, что они имели в виду для сохранения состояния, предназначено для фонового приложения. Приложение электронной книги, вероятно, не нужно будет запускать в фоновом режиме, поэтому вам все равно придется сохранять и восстанавливать состояние, как в OS 3. NSUserDefaults хорошо работает для этого.

...