2010-02-25 65 views
0

我正在编写一个遵循MVC设计模式的简单应用程序。在Xcode项目我有三位:iPhone应用程序设计决策?

  1. 的AppDelegate
  2. 的ViewController
  3. 的DataModel

数据模型对象保存应用程序的所有数据,我想,以确保它被保存在应用程序退出并在应用程序启动时重新加载。

我不确定这是否是正确的方法,我符合我的DataModel NSCoding并添加了encodeWithCoder:和initWithCoder:方法。我宣布我的DataModel在我的viewController为:

FlowerStore *flowerStore = [[FlowerStore alloc] init]; 

这是我的理解是,我需要保存和使用下面列出的AppDelegate的方法负载:

-(void)applicationDidFinishLaunching:(UIApplication *)application { // LOAD 
-(void)applicationWillTerminate:(UIApplication *)application { // SAVE 

任何人都可以点我在正确的方向我应该怎么做?我可以直接在相关对象中找到所有可以存档(或取消存档)数据的示例(请参见下文),我需要在应用程序启动/退出时进行加载和保存。

-(void)encodeWithCoder:(NSCoder *)encoder { 
-(id)initWithCoder:(NSCoder *)decoder { 

任何帮助/信息非常感谢。

EDIT_001:

我刚才检查的书“开始的iPhone3发展”那里是一个部分上achiving“第11章数据持久化”,他们做的东西,我还以为会被糟糕的设计。在本书中,他们将他们的数据模型与[NSCoding]一致,并实现编码/解码的方法。然后,他们在viewController中使用viewDidLoad:和applicationWillTerminate:在适当的时候取消/实现。我发现不好的是他们从UITextFields获取数据?我有我希望存储的数据,这些数据在用户界面上没有显示,因此在我的情况下不起作用。你也不应该从dataModel存档/取消存取,而不是通过UI控件查看视图?

EDIT_002:

越来越近了,现在看起来你做到以下几点:(无论是在的viewController)

-(void)viewDidLoad { // LOAD 
-(void)applicationWillTerminate:(NSNotification *)notification { // SAVE 

注:applicationWillTerminate使用NSNotification而不是UIApplication的,再加上你还需要添加以下代码放在viewDidLoad的底部。

UIApplication *app = [UIApplication sharedApplication]; 
[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(applicationWillTerminate:) 
              name:UIApplicationWillTerminateNotification 
              object:app]; 

加里

回答

1

我认为这是一个偏好问题。在某些时候,您需要调用模型方法进行保存/加载,您已经找到了一些解决方案。在我正在构建的一个项目中,当用户进入/退出“主题”区域时,我只会加载/保存某些数据。如果速度太慢,我可能会使用在“applicationDidFinishLaunching”处调用的单独线程来加载我需要的一些数据部分。然后当他们点击按钮/ tablecellselection时,我会检查线程完成情况。个人而言,我会考虑构建数据加载/保存“包装器”方法来隐藏大多数模型变量(内部)和复杂性,然后让这些包装器简单地返回成功/失败和可能的ptr数据。

0

是,在applicationDidFinishLaunching:和applicationWillTerminate:都很好地加载/保存持久性数据。

如果你有很多数据要加载并且担心缓慢的应用程序加载时间,那么你可能需要考虑一个更加复杂的按需加载事件的策略(在这一点上你可能想用CoreData进行研究)。

+0

从模型中保存/加载是否正确?我有点困惑,我已经声明并正在我的控制器中使用模型方法。但我不知道appDelegate在applicationDidFinishLaunching:和applicationWillTerminate:都是如何工作的? – fuzzygoat 2010-02-25 16:13:09