2010-04-21 78 views
3

我有一个功能很像电子书的应用程序。我有许多不同语言的文本信息,这些信息可以通过多种深入分析方法获取。当用户想要进入他们最后阅读的地方时,他们目前必须浏览章节和章节菜单才能回到他们所在的位置。一个理想的解决方案是设置一个书签系统,我正在考虑。我可以在iPhone OS中保存我的应用程序的状态吗?

但是,如果我没有记错的话,当iPhone OS 4被宣布时,他们似乎在保存应用程序状态方面有很大的作用。这是否意味着有人使用我的阅读器应用程序将能够立即退出,做任何事情,然后当他们回来时,就像他们离开阅读屏幕一样?

我不太了解如何设置书签系统,我想这将是值得研究的,但我可能会想要拖延iPhone OS 4,如果这确实是它将能够做的事情。任何想法或见解将不胜感激!

+0

这里有一个非常有效的关注,但辛格的时间我们不应该谈论如何4。0的作品是NDA的B/C,你应该在苹果开发者论坛上提问。 – bpapa 2010-04-21 15:46:51

+1

就我所知,这个问题已被正确回答了三次。请接受其中一个答案,或让我们知道为什么不。谢谢。 – prendio2 2010-05-11 04:57:01

回答

5

这在iPhone OS中一直是可能的。大多数人使用NSUserDefaults来存储他们的应用程序的状态。然后,在您的应用程序代理的-applicationDidFinishLaunching方法中,或者在您设置视图并初始化应用程序状态的任何位置,只需恢复使用NSUserDefaults保存的状态即可。

3

它们对于保存状态的含义是用于后台应用程序。电子书应用程序可能不需要在后台运行,因此您仍然必须像在OS 3中一样保存和恢复状态。NSUserDefaults适用于此目的。

5

正如其他人指出的那样,这不是OS4特有的,这是在所有应用程序中实现这一点的好习惯。

我建议,当用户打开页面的一本书,比如你保存到使用NSUserDefaults该页面的引用如下:

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

应用程序启动时,你可以看到它的值,并采取相应的行动。

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

你可能只是喜欢存储参考当应用程序即将关闭,但它是


另外,你提到更好的做法来存储它早期(当应用程序意外退出)用户可以浏览大量的“向下钻取”方法。您可能需要在NSMutableArray中记录用户在应用中的位置,并将其保存到NSUserDefaults。当您的应用程序启动时,您将处理此数组中的信息以使用户回到他们停止的位置。

3

如果您正在使用导航控制器,那么你可以使用下面的代码行,以节省您的应用程序状态:

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 { 

     } 
    } 
} 

在应用做加载完成

相关问题