我正在编写一个遵循MVC设计模式的简单应用程序。在Xcode项目我有三位:iPhone应用程序设计决策?
- 的AppDelegate
- 的ViewController
- 的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];
加里
从模型中保存/加载是否正确?我有点困惑,我已经声明并正在我的控制器中使用模型方法。但我不知道appDelegate在applicationDidFinishLaunching:和applicationWillTerminate:都是如何工作的? – fuzzygoat 2010-02-25 16:13:09